home *** CD-ROM | disk | FTP | other *** search
Wrap
10 ' 20 ' Power GUI system 30 ' 40 ' [ C” 4th edition β version ] サンプルプログラム 50 ' 60 ' 要:RAM4M以上 70 ' 80 ' Programmed by Hirotaka Matsuoka 90 ' for F-BASIC 386 V2.1 L10 100 ' 110 CLEAR ,,4096 , 1600000 ,, 50000 120 SCREEN @0 : COLOR 7,7 : VIEW : WINDOW : CLS 130 ' 140 ' ファイルセレクタの色の指定方法 150 ' COLOR 7 ,(タイトルバー等の色),(文字・枠等の色) 160 ' 170 ' (下のどの画面モードでも立ち上がるから、試してみようっ!) 180 ' 190 SCREEN @0 : COLOR 7,%7,%8 : PALETTE 7,[200,200,200] ' 16 colors 200 'SCREEN @2 : COLOR 7,%218,%0 ' 256 colors 210 'SCREEN @1 : COLOR 7,[255,180,180],[16,16,16] ' 32768 colors 220 ' 230 PGUI_MEMORY& = 700000 240 GOSUB *PGUI_INIT 250 GOSUB *WALL_PAPER 260 GOSUB *GUI_DATA_ENTRY 270 ' 280 PGUI_NAME$ = "タイトル画面" : GOSUB *PGUI_WIN_OPEN 290 ' 300 ' --<< タイトル画面処理 >>-- 310 *P001 320 GOSUB *PGUI_REFRESH 330 WHILE PGUI_RETURN$ <> "終了" 340 IF PGUI_RETURN$ = "未" THEN 350 PGUI_NAME$ = "未サポート告知" : GOSUB *PGUI_WIN_OPEN 360 WHILE PGUI_RETURN$ <> "確認" : GOSUB *PGUI : WEND 370 GOSUB *PGUI_WIN_CLOSE 380 ELSE 390 IF PGUI_RETURN$ = "file selector" THEN 400 FS_TITLE$ = "開発中です。誰かコンパイラをくれーっ。" : GOSUB *FILE_SELECTOR 410 ENDIF 420 IF PGUI_RETURN$ = "icon viewer" THEN GOSUB *ICON_VIEWER 430 ENDIF 440 GOSUB *PGUI 450 WEND 460 ' 470 PGUI_NAME$ = "確認ウィンドウ" : GOSUB *PGUI_WIN_OPEN 480 GOSUB *PGUI_REFRESH : WHILE PGUI_RETURN$ = "" : GOSUB *PGUI : WEND 490 ' 500 IF PGUI_RETURN$ = "取消" THEN GOSUB *PGUI_WIN_CLOSE : GOTO *P001 510 GOSUB *PGUI_WIN_CLOSE 520 END 530 ' 540 *ICON_VIEWER 550 PGUI_NAME$ = "Icon list window" 560 GOSUB *PGUI_WIN_OPEN 570 GOSUB *PGUI_REFRESH : WHILE PGUI_RETURN$ <> "も ど る" : GOSUB *PGUI : WEND 580 ' 590 ' 600 GOSUB *PGUI_WIN_CLOSE 610 RETURN 620 ' 630 *GUI_DATA_ENTRY 640 DIM PGUI_LIST_SCROLL%( FNG_BUF_DIM&( 400 , 400 , PGUI_BITS_PAR_SAMPLE , 2 )) 650 ' 660 ' タイトル画面GUIデータ登録 670 ' 680 PGUI_NAME$ = "タイトル画面" : PGUI_TYPE$ = "WINDOW" 690 PGUI_FORM$ = "T-OS" : PGUI_DISP$ = "C two prime programmer's support MAIN MENU" 700 PGUI_WX = 590 : PGUI_WY = 400 710 PGUI_POS$ = "中央" 720 PGUI_DATA& = 1 730 GOSUB *PGUI_ENTRY 740 ' 750 GOSUB *PGUI_REFRESH 760 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "CLOSE" : PGUI_RETURN$ = "終了" : GOSUB *PGUI_ENTRY 770 ' 780 PGUI_TYPE$ = "LETTER" : PGUI_SX = 60 790 PGUI_SY = 27 : PGUI_DISP$ = "POWER GUI SYSTEM C TWO PRIME 4TH EDITION" :GOSUB *PGUI_ENTRY 800 PGUI_SY = 52 : PGUI_DISP$ = " PROGRAMMERS SUPPORT" :GOSUB *PGUI_ENTRY 810 ' 820 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "ROUND" 830 PGUI_SX = 10 : PGUI_WX = 140 : PGUI_WY = 0 : WY = 10 840 PGUI_SY = 100 : PGUI_RETURN$ = "未" : PGUI_DISP$ = "行番号管理" : GOSUB *PGUI_ENTRY 850 PGUI_SY = 130 : PGUI_RETURN$ = "未" :PGUI_DISP$ = "アイコンデータ作成" : GOSUB *PGUI_ENTRY 860 PGUI_SY = 160 : PGUI_RETURN$ = "file selector" :PGUI_DISP$ = "ファイルセレクタβ版" : GOSUB *PGUI_ENTRY 870 PGUI_SY = 190 : PGUI_RETURN$ = "icon viewer" : PGUI_DISP$ = "利用可能アイコン一覧" : GOSUB *PGUI_ENTRY 880 ' 890 PGUI_SY = 300 : PGUI_DISP$ = "終 了" : PGUI_RETURN$ = "終了" : GOSUB *PGUI_ENTRY 900 ' 910 PGUI_FILE_NAME$ = "PGUI_SMN.DOC" 920 PGUI_LIST_BUF_SIZE& = 200 : PGUI_LIST_OFFSET& = PGUI_LIST_ENTRY& 930 GOSUB *PGUI_READ_TEXT 940 ' 950 GOSUB *PGUI_REFRESH 960 PGUI_TYPE$ = "SCROLL LIST MENU" : PGUI_NAME$ = "説明" 970 PGUI_SX = 160 : PGUI_SY = 76 980 PGUI_WX = 400 : PGUI_DISP_WY = 22 990 PGUI_LIST_BUF_SIZE% = 200 1000 GOSUB *PGUI_ENTRY 1010 GOSUB *PGUI_REFRESH 1020 ' 1030 ' アイコン一覧表ウィンドウGUIデータ登録 1040 ' 1050 PGUI_NAME$ = "Icon list window" : PGUI_DISP$ = "アイコン管理" 1060 PGUI_TYPE$ = "WINDOW" : PGUI_FORM$ = "T-OS" 1070 PGUI_POS$ = "中央" : PGUI_WX = 350 : PGUI_WY = 300 1080 GOSUB *PGUI_ENTRY 1090 ' 1100 GOSUB *PGUI_REFRESH 1110 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "3D" : PGUI_WX = 100 : PGUI_WY = 0 : PGUI_SY = 260 1120 PGUI_SX = 50 : PGUI_DISP$ = "も ど る" : GOSUB *PGUI_ENTRY 1130 PGUI_SX = 180 : PGUI_DISP$ = "アイコン番号" : GOSUB *PGUI_ENTRY 1140 GOSUB *PGUI_REFRESH 1150 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "CLOSE" : PGUI_RETURN$ = "も ど る" : GOSUB *PGUI_ENTRY 1160 ' 1170 GOSUB *PGUI_REFRESH 1180 PGUI_TYPE$ = "LETTER" : PGUI_FORM$ = "SYSTEM12" : PGUI_SX = 20 1190 PGUI_SY = 200 : PGUI_DISP$ = " 0から順に左から右、上から下の順でアイコン番号が" : GOSUB *PGUI_ENTRY 1200 PGUI_SY = 220 : PGUI_DISP$ = "付けられています。" : GOSUB *PGUI_ENTRY 1210 PGUI_SY = 240 : PGUI_DISP$ = " 各行の先頭のアイコン番号は10の倍数です。" : GOSUB *PGUI_ENTRY 1220 ' 1230 ' 1240 FOR Y = 0 TO 5 1250 PGUI_SY = 30 + Y * 40 1260 FOR X = 0 TO 9 1270 PGUI_SX = 20 + X * 30 1280 PGUI_DATA& = Y * 10 + X 1290 PGUI_TYPE$ = "ICON24" 1300 GOSUB *PGUI_ENTRY 1310 NEXT 1320 NEXT 1330 ' 1340 ' 1350 ' 1360 ' 1370 ' 1380 ' 1390 ' 1400 ' 1410 ' 1420 ' 1430 ' 1440 ' 確認ウィンドウ用GUIデータ登録 1450 ' 1460 GOSUB *PGUI_REFRESH 1470 PGUI_NAME$ = "確認ウィンドウ" 1480 PGUI_TYPE$ = "WINDOW" : PGUI_FORM$ = "SQUARE2" 1490 PGUI_WX = 295 : PGUI_WY = 73 : PGUI_POS$ = "中央" 1500 GOSUB *PGUI_ENTRY 1510 ' 1520 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "ROUND" : PGUI_SY = 42 : PGUI_WX = 45 : PGUI_WY = 0 1530 PGUI_SX = 220 : PGUI_DISP$ = "取消" : GOSUB *PGUI_ENTRY 1540 PGUI_SX = 155 : PGUI_DISP$ = "実行" : GOSUB *PGUI_ENTRY 1550 ' 1560 PGUI_TYPE$ = "ICON24" : PGUI_DATA& = 20 : PGUI_SX = 10 : PGUI_SY = 10 : GOSUB *PGUI_ENTRY 1570 ' 1580 PGUI_TYPE$ = "LETTER" : PGUI_FORM$ = "SYSTEM12" : PGUI_SX = 50 1590 PGUI_SY = 17 : PGUI_DISP$ = "C”プログラマーズサポートを終了します" : GOSUB *PGUI_ENTRY 1600 ' 1610 ' 未サポート告知ウィンドウ用GUIデータ登録 1620 ' 1630 GOSUB *PGUI_REFRESH 1640 PGUI_NAME$ = "未サポート告知" 1650 PGUI_TYPE$ = "WINDOW" : PGUI_FORM$ = "SQUARE2" 1660 PGUI_WX = 240 : PGUI_WY = 73 : PGUI_POS$ = "中央" 1670 GOSUB *PGUI_ENTRY 1680 ' 1690 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "ROUND" : PGUI_SY = 42 : PGUI_WX = 45 : PGUI_WY = 0 1700 PGUI_SX = 100 : PGUI_DISP$ = "確認" : GOSUB *PGUI_ENTRY 1710 ' 1720 PGUI_TYPE$ = "ICON24" : PGUI_DATA& = 30 : PGUI_SX = 10 : PGUI_SY = 10 : GOSUB *PGUI_ENTRY 1730 ' 1740 PGUI_TYPE$ = "LETTER" : PGUI_FORM$ = "SYSTEM12" : PGUI_SX = 60 1750 PGUI_SY = 17 : PGUI_DISP$ = "指定の機能は未サポートです" : GOSUB *PGUI_ENTRY 1760 RETURN 1770 ' 1780 ' *WALL_PAPER 1790 ' 1800 ' 壁紙を書きます( 1024×786 Dot 16M colors 以内の全ての画面モード用 ) 1810 ' 1820 *WALL_PAPER 1830 LINE(0,0)-(15,15),PRESET,,BF 1840 FOR I=0 TO 7 1850 LINE( 0 , 16 + I * 2 )-( 15 , 16 + I * 2 ),PRESET,,,&HAAAA 1860 LINE( 0 , 16 + I*2+1 )-( 15 , 16 + I*2+1 ),PRESET,,,&H5555 1870 NEXT 1880 FOR I=0 TO 7 1890 LINE( 15 , I * 2 )-( 31 , I * 2 ),PRESET,,,&HAAAA 1900 LINE( 15 , I*2+1 )-( 31 , I*2+1 ),PRESET,,,&H5555 1910 NEXT 1920 DIM WALL_PAPER%(80000) 1930 GET@A(0,0)-(31,31),WALL_PAPER% 1940 FOR Y = 0 TO 24 : PUT@A(0,Y*32)-(31,Y*32+31),WALL_PAPER% : NEXT 1950 GET@A(0,0)-(31,799),WALL_PAPER% 1960 FOR X = 0 TO 31 : PUT@A(X*32,0)-(X*32+31,799),WALL_PAPER% : NEXT 1970 ERASE WALL_PAPER% 1980 RETURN 1990 ' 2000 ' *File_selector / V1.0 L10 @10 #00 2010 ' Programmed by Hirotaka Matsuoka 2020 ' 2030 ' 隠し機能を利用したGUIファイルセレクタ 2040 ' FS_FILE$ / EX$ / SIZE& に情報が返ります。 2050 ' FS_TITLE$ に題名が設定できます。 2060 ' 2070 *FILE_SELECTOR 2080 FS_WILDCARD$ = "*.*" 2090 PGUI_MEMORY& = 450000 2100 GOSUB *PGUI_INIT 2110 ' 2120 FS_TYPE = 0 2130 IF FS_TYPE$ = "" THEN 2140 DIM FS_I$(2) : FS_I$(0)="読" : FS_I$(1)="削除" : FS_I$(2)="ロード" 2150 FOR FS_I = 0 TO 2 2160 FS_DUMMY = KINSTR( FS_TITLE$ , FS_I$(FS_I)) 2170 IF FS_DUMMY <> 0 THEN FS_TYPE = 1 2180 NEXT 2190 ERASE FS_I$ 2200 ELSE 2210 IF FS_TYPE$="Read only" OR FS_TYPE$="READ ONLY" OR FS_TYPE$="read only" THEN FS_TYPE = 1 2220 ENDIF 2230 ' 2240 IF FS_TITLE$ = "" THEN FS_TITLE$ = "ファイル名選択" 2250 ' 2260 IF FS_EVER_CALLED = 0 THEN GOSUB *FS_INIT : FS_EVER_CALLED = -1 2270 ' 2280 PGUI_NAME$ = "Power GUI file selector" 2290 GOSUB *PGUI_WIN_OPEN 2300 ' 2310 IF FS_EVER_CALLED = 0 THEN DIM FS_GET_DRIVE( 25 ) : GOSUB *FS_GET_DRIVE 2320 ' 2330 GOSUB *PGUI_REFRESH 2340 WHILE PGUI_RETURN$ <> "取 消" 2350 GOSUB *PGUI 2360 WEND 2370 GOSUB *PGUI_WIN_CLOSE 2380 RETURN 2390 ' 2400 *FS_INIT 2410 ' ファイルセレクタ用GUIデータ登録 2420 ' 2430 GOSUB *PGUI_REFRESH 2440 PGUI_TYPE$ = "WINDOW" 2450 PGUI_NAME$ = "Power GUI file selector" 2460 PGUI_FORM$ = "T-OS" : PGUI_POS$ = "中央" 2470 PGUI_DISP$ = FS_TITLE$ 2480 PGUI_WX = 400 : PGUI_WY = 238 2490 GOSUB *PGUI_ENTRY : GOSUB *PGUI_REFRESH 2500 ' 2510 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "CLOSE" : PGUI_RETURN$ = "取 消" 2520 GOSUB *PGUI_ENTRY 2530 ' 2540 PGUI_FORM$ = "ROUND" 2550 PGUI_DISP$ = "取 消" 2560 PGUI_SY = 202 2570 PGUI_SX = 328 : GOSUB *PGUI_ENTRY 2580 ' 2590 PGUI_DISP$ = "実 行" 2600 PGUI_SX = 250 : GOSUB *PGUI_ENTRY 2610 ' 2620 PGUI_FORM$ = "SQUARE" 2630 PGUI_DISP$ = "ディレクトリ移動" 2640 PGUI_SX = 244 : PGUI_SY = 26 : PGUI_WY = 15 2650 GOSUB *PGUI_ENTRY 2660 ' 2670 PGUI_DISP$ = "SHOW ALL" 2680 PGUI_SX = 10 : PGUI_SY = 67 : PGUI_WX = 105 : PGUI_WY = 14 2690 GOSUB *PGUI_ENTRY 2700 ' 2710 PGUI_DISP$ = "" : PGUI_RETURN$ = "Current directory indigator" 2720 PGUI_SX = 124 : PGUI_SY = 25 : PGUI_WX = 90 : PGUI_WY = 16 2730 GOSUB *PGUI_ENTRY 2740 ' 2750 PGUI_SX = 366 : PGUI_WX = 16 : PGUI_WY = 17 : PGUI_RETURN$ = "UP" : GOSUB *PGUI_ENTRY 2760 ' 2770 GOSUB *PGUI_REFRESH 2780 PGUI_LIST_OFFSET& = PGUI_LIST_ENTRY& 2790 GOSUB *FS_GET_FILE_LIST ' PGUI_MAX_Y も自動的に設定される 2800 ' 2810 PGUI_TYPE$ = "SCROLL LIST MENU" : PGUI_FORM$ = "MENU" 2820 PGUI_NAME$ = "file list" 2830 PGUI_SX = 124 : PGUI_SY = 43 : PGUI_WX = 240 2840 PGUI_DISP_WY = 10 : PGUI_LIST_BUF_SIZE& = 1024 2850 PGUI_START_Y = 0 2860 GOSUB *PGUI_ENTRY 2870 ' 2880 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "SQUARE" : PGUI_SY = 25 2890 PGUI_SX = 10 : PGUI_WX = 19 : PGUI_WY = 40 : PGUI_RETURN$ = "drive -1" : GOSUB *PGUI_ENTRY 2900 PGUI_SX = 96 : PGUI_RETURN$ = "drive +1" : GOSUB *PGUI_ENTRY 2910 PGUI_SX = 31 : PGUI_WX = 63 : PGUI_RETURN$ = "update" : GOSUB *PGUI_ENTRY 2920 ' 2930 PGUI_TYPE$ = "ICON24" 2940 PGUI_NAME$ = "drive icon" : PGUI_SY = 32 2950 PGUI_DATA& = 0 : PGUI_SX = 55 : GOSUB *PGUI_ENTRY 2960 ' 2970 PGUI_TYPE$ = "ICON12" 2980 PGUI_NAME$ = "drive name icon" 2990 PGUI_DATA& = 30 : PGUI_SX = 40 : GOSUB *PGUI_ENTRY 3000 PGUI_DATA& = 2 : PGUI_SX = 14 : PGUI_SY = 40 : GOSUB *PGUI_ENTRY 3010 PGUI_DATA& = 3 : PGUI_SX = 100 : GOSUB *PGUI_ENTRY 3020 PGUI_DATA& = 11 : PGUI_SX = 368 : PGUI_SY = 28 : GOSUB *PGUI_ENTRY 3030 ' 3040 GOSUB *PGUI_REFRESH 3050 ' 3060 RETURN 3070 ' 3080 ' *FS_Get_file_list 3090 ' 3100 ' ファイル・ディレクトリ名の取得と成型・ソーティングを行い、以下 3110 ' の変数に結果を返します。 3120 ' 3130 ' FS_WILDCARD$ ワイルドカードを設定します。 3140 ' PGUI_LIST$(x) 成型されたファイル・ディレクトリ名リスト 3150 ' FS_CURRENT_DIR$ カレントディレクトリ名 3160 ' PGUI_MAX_Y リストの総項目数 3170 ' 3180 *FS_GET_FILE_LIST 3190 FILES FS_WILDCARD$ , C , FS_WORK& : FS_WORK_MAX& = FS_WORK&(1) 3200 DIM FS_MASTER$( FS_WORK_MAX& ) , FS_DIR$( FS_WORK_MAX& ) , FS_FILE$( FS_WORK_MAX& ) 3210 FS_WORK_MAX& = FS_WORK_MAX& - 1 3220 ' 3230 FILES FS_WILDCARD$ , N , FS_MASTER$ 3240 ' 3250 FS_CURRENT_DIR$ = FS_MASTER$(1) 3260 ' -- ファイルとディレクトリを分ける -- 3270 PGUI_MAX_Y = 0 : FS_DIR_COUNTER& = 0 : FS_FILE_COUNTER& = 0 3280 FOR FS_I = 0 TO FS_WORK_MAX& 3290 FS_DUMMY$ = FS_MASTER$( FS_I + 1 ) 3300 FS_DUMMY$ = " " + MID$( FS_DUMMY$,1,12 )+ MID$( FS_DUMMY$,16,12 )+MID$( FS_DUMMY$,31,2 )+ "-" + MID$( FS_DUMMY$,34,2 )+ "-" + MID$( FS_DUMMY$,37,8) 3310 IF MID$( FS_DUMMY$ , 18 , 3 ) = "DIR" THEN 3320 FS_WORK$ = LEFT$( FS_DUMMY$ , 3 ) 3330 IF FS_WORK$ <> " . " THEN 3340 IF FS_WORK$ = " .." THEN 3350 MID$( FS_DUMMY$ , 1 ) = "<<親ディレクトリ >> " 3360 PGUI_LIST$( PGUI_LIST_OFFSET& ) = FS_DUMMY$ 3370 FS_DIR_POINTER& = 1 3380 ELSE 3390 FS_DIR$( FS_DIR_COUNTER& ) = FS_DUMMY$ 3400 FS_DIR_COUNTER& = FS_DIR_COUNTER& + 1 3410 ENDIF 3420 ENDIF 3430 ELSE 3440 FS_FILE$( FS_FILE_COUNTER& ) = FS_DUMMY$ 3450 FS_FILE_COUNTER& = FS_FILE_COUNTER& + 1 3460 ENDIF 3470 NEXT 3480 FS_FILE_POINTER& = FS_DIR_POINTER& + FS_DIR_COUNTER& 3490 PGUI_MAX_Y = FS_FILE_POINTER& + FS_FILE_COUNTER& 3500 ' -- ディレクトリ名のソート -- 3510 IF FS_DIR_COUNTER& <> 0 THEN 3520 FOR FS_I = FS_DIR_POINTER& TO FS_FILE_POINTER& - 1 3530 FS_DUMMY$ = FS_DIR$( FS_I - FS_DIR_POINTER& ) 3540 MID$( FS_DUMMY$ , 1 ) = "<" 3550 MID$( FS_DUMMY$ , 13 ) = "> " 3560 PGUI_LIST$( FS_I + PGUI_LIST_OFFSET& ) = FS_DUMMY$ 3570 NEXT 3580 FS_START = PGUI_LIST_OFFSET& + FS_DIR_POINTER& : FS_SIZE = FS_DIR_COUNTER& 3590 GOSUB *FS_SORT_WORK 3600 ENDIF 3610 ' -- ファイル名のソート -- 3620 IF FS_FILE_COUNTER& <> 0 THEN 3630 FOR FS_I = FS_FILE_POINTER& TO PGUI_MAX_Y - 1 3640 PGUI_LIST$( FS_I + PGUI_LIST_OFFSET& ) = FS_FILE$( FS_I - FS_FILE_POINTER& ) 3650 NEXT 3660 FS_START = PGUI_LIST_OFFSET& + FS_FILE_POINTER& : FS_SIZE = FS_FILE_COUNTER& 3670 GOSUB *FS_SORT_WORK 3680 ENDIF 3690 ' 3700 ERASE FS_MASTER$ , FS_DIR$ , FS_FILE$ 3710 RETURN 3720 ' 3730 ' *FS_Sort_work 3740 ' 3750 ' ソート中枢 3760 ' PGUI_LIST$(x) の FS_START 番目から FS_SIZE 個のデーターに対し 3770 ' てソーティングを行います。 3780 ' 3790 *FS_SORT_WORK 3800 IF FS_SIZE < 2 THEN RETURN 3810 FOR FS_I = FS_START TO FS_START + FS_SIZE - 2 3820 FS_WORK$ = PGUI_LIST$( FS_I ) 3830 FOR FS_J = FS_I + 1 TO FS_START + FS_SIZE - 1 3840 IF PGUI_LIST$( FS_J ) < FS_WORK$ THEN SWAP FS_WORK$ , PGUI_LIST$( FS_J ) 3850 NEXT 3860 PGUI_LIST$( FS_I ) = FS_WORK$ 3870 NEXT 3880 RETURN 3890 ' 3900 ' *FS_get_drive 3910 ' 3920 ' ドライブ構成情報を FS_GET_DRIVE( Drive NO' ) に返します。 3930 ' 3940 *FS_GET_DRIVE 3950 ON ERROR GOTO *FS_GET_DRIVE_ERR 3960 FS_GET_DRIVE_FLAG = -1 3970 FOR FS_GET_DRIVE = 0 TO 25 3980 FS_DRIVE_EXIST = -1 3990 FS_GET_DRIVE_DUMMY = DSKF( FS_GET_DRIVE ) 4000 IF FS_DRIVE_EXIST THEN 4010 FS_GET_DRIVE( FS_GET_DRIVE ) = &H100 4020 ELSE 4030 FS_GET_DRIVE( FS_GET_DRIVE ) = &HFF 4040 ENDIF 4050 NEXT 4060 FS_GET_DRIVE_FLAG = 0 4070 ON ERROR GOTO 0 4080 RETURN 4090 ' 4100 *FS_GET_DRIVE_ERR 4110 IF FS_GET_DRIVE_FLAG THEN 4120 IF ERR=60 FS_DRIVE_EXIST=0 4130 ENDIF 4140 RESUME NEXT 4150 ' 4160 ' 4170 ' Power GUI system [ C" ( C two prime ) ] v4.0 L10 @10 #00 4180 ' for F-BASIC 386 4190 ' Programmed by H.Matsuoka 4200 ' 4210 ' F-BASIC 386 用のGUIシステムです。 4220 ' T-OS 準拠デザインのGUIアプリケーションに最適です。 4230 ' 4240 ' 詳しくは別記説明書をご覧下さい。 4250 ' 4260 ' *PGUI_init 4270 ' 4280 ' Power GUI system [ C" ( C two prime ) ] を初期化します。 4290 ' 以下のパラメータを与えてプログラムの最初の方で実行して下さい。 4300 ' なお、同一プログラム中で、本ルーチンを複数回実行した場合は、最初の 4310 ' 設定のみが有効です。 4320 ' 4330 ' PGUI_MEMORY& Power GUI が使える配列領域の大きさ(単位はバイト) 4340 ' (プログラムにもよるが 700KByte 程度は必要 ) 4350 ' (実際には、この設定プラス 50KByte 位を消費する ) 4360 ' 省略時は未使用配列変数領域の半分が割り当てられる 4370 ' 4380 ' < 返り値 > 4390 ' 4400 ' PGUI_COLORS& 現在の画面モードの色数 4410 ' PGUI_BITS_PAR_SAMPLE 色数を Bits par sample で表現したもの 4420 ' 4430 *PGUI_INIT 4440 IF PGUI_INIT_EVER_CALLED = -1 THEN RETURN 4450 PGUI_INIT_EVER_CALLED = -1 4460 ' 4470 ' 統合型グラフィックバッファ算出関数定義 4480 DEF FNG_BUF_DIM&(X,Y,BIT,VAR)=-INT(INT(-X*BIT/(8-(BIT=4)*24))*(8-(BIT=4)*24)*Y/8)/VAR 4490 ' 4500 ' フォント定義 4510 DEF FONT "システム 12ドット" 4520 PGUI_FONT_WX = 6 4530 PGUI_FONT_WY = 12 4540 PGUI_SYMBOL_M! = PGUI_FONT_WY / 16 4550 ' 4560 ' 色数と Bits par sample の調査 4570 GET@A(0,0)-(7,0),PGUI_WORK_B&:PSET(0,0),7 : LINE(1,0)-(7,0),PSET,0 4580 GET@A(0,0)-(7,0),PGUI_WORK& : PUT@A(0,0)-(7,0),PGUI_WORK_B& 4590 PGUI_COLORS& = PGUI_WORK&( 0 ) + 1 4600 PGUI_BITS_PAR_SAMPLE = - INT( - LOG( PGUI_COLORS& ) / LOG( 2 ) ) 4610 IF PGUI_COLORS& = 32768 THEN PGUI_BITS_PAR_SAMPLE = 16 4620 ERASE PGUI_WORK_B& , PGUI_WORK& 4630 ' 4640 ' ディスプレイ解像度の算出 4650 PGUI_RESO_X_M1 = WINDOW(2) - WINDOW(0) 4660 PGUI_RESO_Y_M1 = WINDOW(3) - WINDOW(1) 4670 PGUI_RESO_X = PGUI_RESO_X_M1 + 1 4680 PGUI_RESO_Y = PGUI_RESO_Y_M1 + 1 4690 ' 4700 ' ウィンドウ管理配列の確保 4710 DIM PGUI_WIN_OPEN_HISTORY(40) 4720 DIM PGUI_WIN_OFFSET&(40) 4730 ' 4740 ' GUI部品が利用するテキストリスト領域の確保 4750 DIM PGUI_LIST$(5000) 4760 ' 4770 ' マウスイベントデーター初期化 4780 PGUI_EVENT_DATA_SIZE = 8 4790 PGUI_MAX_EVENT_NO = 500 4800 PGUI_EV_ENTRY& = 0 4810 PGUI_EVENT_NO = 0 4820 DIM PGUI_EVENT_OFFSET&( 40 ) ' ウィンドウ毎のイベントデータ先頭位置 4830 DIM PGUI_EVENT&( PGUI_MAX_EVENT_NO * PGUI_EVENT_DATA_SIZE ) 4840 ' 4850 ' 資料:マウスイベントデーターのフォーマット 4860 ' 4870 ' ウィンドウヘッダ部 4880 ' + 0 ウィンドウ内のイベント総数 4890 ' 4900 ' マウスイベントデータ部 4910 ' + 0 SX (座標は全てウィンドウ内座標) 4920 ' + 1 SY 4930 ' + 2 EX 4940 ' + 3 EY 4950 ' + 4 イベント発生時の呼出し部品ウィンドウ内番号 4960 ' + 5 イベント発生時の部品への受渡しパラメータ 4970 ' + 6 ドラッグ種類(0:ドラッグしない 1:ドラッグ、リリース時に呼び出す 2:ドラッグ、ドラッグ中にも呼び出す) 4980 ' + 7 イベント確定タイミング(0:リリース時 1:インパクト時 2:プレス中ずっと) 4990 ' 5000 ' 画面退避領域の算出・確保 5010 IF PGUI_MEMORY& = 0 THEN PGUI_MEMORY& = INT( FRE(3) / 2 ) 5020 DIM PGUI_WIN_BUF%( INT( PGUI_MEMORY& / 2 ) ) 5030 ' 5040 ' 部品データーエントリ・運用ワーク変数確保 5050 DIM PGUI_HYBRID(50) ' ハイブリッド部品のエントリー用 5060 PGUI_ENTRY_HYBRID = 0 ' ハイブリッドの世代数を記録する 5070 PGUI_WIN_HEADER_SIZE = 2 ' Window ヘッダサイズ 5080 PGUI_PARTS_DATA_SIZE = 25 ' 部品1つあたりのデータサイズ 5090 PGUI_CHAR_DATA_SIZE = 5 ' 部品1つあたりの文字領域の大きさ 5100 PGUI_PARTS_ENTRY& = 0 ' 部品データのスタックエントリーカウンタ 5110 PGUI_CHAR_ENTRY& = 0 ' 部品データ用文字領域のスタックエントリーカウンタ 5120 PGUI_LIST_ENTRY& = 0 ' テキストリスト領域のスタックエントリーカウンタ 5130 PGUI_WIN_ENTRY = 0 ' 登録されているウィンドウの総数 5140 PGUI_PARTS_NO = 0 ' アクティブ部品のウィンドウ内部品番号 5150 PGUI_PARTS_OFFSET&= 0 ' アクティブ部品の部品データオフセット 5160 PGUI_CHAR_OFFSET& = 0 ' アクティブ部品用文字領域のオフセット 5170 PGUI_LIST_OFFSET& = 0 ' アクティブ部品用のテキストリストデータのオフセット 5180 PGUI_WIN_OPEN_HISTORY = 0 ' オープンされているウィンドウの総数 5190 PGUI_WIN_NO = 0 ' アクティブウィンドウのウィンドウ番号 5200 PGUI_WIN_OFFSET& = 0 ' アクティブウィンドウのGUIデータオフセット 5210 PGUI_WIN_BUF_OFFSET& = 0 ' 画面退避領域の使用済バッファサイズ 5220 PGUI_LINK_PARTS_NO = - 1 ' イベント発生時の呼出し部品番号 5230 ' 5240 ' 部品データ保持配列定義と各要素のオフセット設定 5250 DIM PGUI&(10000) ' GUIデータ格納配列 5260 DIM PGUI$(2000) ' 文字領域 5270 PGUI_OF_CHAR_OFFSET = 0 ' 5280 PGUI_OF_HIBRID_NO = 1 ' ハイブリッド世代番号(常に1以上) 5290 PGUI_OF_MASTER_OFFSET = 2 ' ハイブリッドマスター部品オフセット 5300 PGUI_OF_LIST_OFFSET = 3 ' リスト領域の先頭オフセット。チャイルドは常にマスターと共有 5310 PGUI_OF_LIST_BUF_SIZE = 4 ' リスト領域の大きさ(行数)。チャイルドは常にマスターと共有 5320 PGUI_OF_DISP_SX = 5 : PGUI_OF_DISP_SY = 6 5330 PGUI_OF_LINE_SPACE = 7 5340 PGUI_OF_LINK_PARTS_NO = 8 ' リンクする部品番号 5350 PGUI_OF_DATA = 9 5360 PGUI_OF_SX = 13 : PGUI_OF_SY = 14 5370 PGUI_OF_WX = 15 : PGUI_OF_WY = 16 5380 PGUI_OF_START_X = 17 : PGUI_OF_START_Y = 18 5390 PGUI_OF_MAX_X = 19 : PGUI_OF_MAX_Y = 20 5400 PGUI_OF_MIN_X = 21 : PGUI_OF_MIN_Y = 22 5410 PGUI_OF_DISP_WX = 23 : PGUI_OF_DISP_WY = 24 5420 ' 5430 ' ドローウィンドウ周り初期化 5440 DIM PGUI_DRAW_WIN%( 200 * 4 ) 5450 PGUI_DRAW_WIN_NO = -1 5460 PGUI_DRAW_SX = 0 : PGUI_DRAW_SY = 0 5470 PGUI_DRAW_WX = PGUI_RESO_X : PGUI_DRAW_WY = PGUI_RESO_Y 5480 GOSUB *PGUI_DRAW_WIN_SET 5490 ' 5500 ' 12/24ドットローカルアイコン初期化 5510 GOSUB *PGUI_ICON_INIT 5520 ' 5530 ' マウス初期化・マウススピード設定 5540 MOUSE 0 : MOUSE 3 , 0 , INP(&H3B06) : MOUSE 3 , 1 , INP(&H3B06) 5550 MOUSE 1 , 120 , 100 , 1 5560 ' 5570 GOSUB *PGUI_REFRESH 5580 RETURN 5590 ' 5600 ' *PGUI_ICON_INIT 5610 ' 5620 ' 12/24ドットローカルアイコンを初期化します。 5630 ' 5640 *PGUI_ICON_INIT 5650 DIM PGUI_ICON_WORK%( FNG_BUF_DIM&( 320 , 240 , 1 , 2 )) 5660 DIM PGUI_ICON_BUF%( FNG_BUF_DIM&( 300 , 400 , PGUI_BITS_PAR_SAMPLE , 2 )) 5670 GET@A( 0 , 0 )-( PGUI_RESO_X , PGUI_RESO_Y ),PGUI_WIN_BUF% 5680 PGUI_OFFSET& = 0 5690 ' 5700 PGUI_WX = 24 : PGUI_WY = 24 : PGUI_X = 10 : PGUI_Y = 6 5710 LOAD@ "PGUI24.ICN",PGUI_ICON_WORK% 5720 PGUI_ICON24_OFFSET& = PGUI_OFFSET& 5730 GOSUB *PGUI_ICON_INIT_WORK 5740 PGUI_ICON24_BUF_SIZE& = PGUI_BUF_SIZE& 5750 ' 5760 PGUI_WX = 12 : PGUI_WY = 12 : PGUI_X = 10 : PGUI_Y = 12 5770 LOAD@ "PGUI12.ICN",PGUI_ICON_WORK% 5780 PGUI_ICON12_OFFSET& = PGUI_OFFSET& 5790 GOSUB *PGUI_ICON_INIT_WORK 5800 PGUI_ICON12_BUF_SIZE& = PGUI_BUF_SIZE& 5810 ' 5820 PUT@A( 0 , 0 )-( PGUI_RESO_X , PGUI_RESO_Y ),PGUI_WIN_BUF% 5830 ERASE PGUI_ICON_WORK% 5840 RETURN 5850 ' 5860 *PGUI_ICON_INIT_WORK 5870 PGUI_BUF_SIZE& = FNG_BUF_DIM&( PGUI_WX , PGUI_WY , PGUI_BITS_PAR_SAMPLE , 2 ) 5880 LINE(0,0)-( PGUI_WX * PGUI_X - 1 , PGUI_WY * PGUI_Y - 1 ),PSET,7,BF 5890 PUT@(0,0)-( PGUI_WX * PGUI_X - 1 , PGUI_WY * PGUI_Y - 1 ),PGUI_ICON_WORK%,PSET 5900 FOR PGUI_Y = 0 TO PGUI_Y - 1 5910 PGUI_SY = PGUI_Y * PGUI_WY : PGUI_EY = PGUI_SY + PGUI_WY - 1 5920 FOR PGUI_X = 0 TO PGUI_X - 1 5930 PGUI_SX = PGUI_X * PGUI_WX 5940 GET@A( PGUI_SX , PGUI_SY )-( PGUI_SX + PGUI_WX -1 , PGUI_EY ),PGUI_ICON_BUF%,PGUI_OFFSET& 5950 PGUI_OFFSET& = PGUI_OFFSET& + PGUI_BUF_SIZE& 5960 NEXT 5970 NEXT 5980 RETURN 5990 ' 6000 ' *PGUI 6010 ' 6020 ' マウスの動作とウィンドウや部品の関係を統括します。 6030 ' 本ルーチンを連続して呼び出す事で、システムが動作します。 6040 ' 6050 *PGUI 6060 GOSUB *PGUI_MOUSE 6070 PGUI_SYS$ = "" 6080 RETURN 6090 ' 6100 *PGUI_MOUSE ' マウスインパクトのチェックからイベント確定までの処理 6110 PGUI_OCCER_EVENT = 0 6120 IF MOUSE( 3 , 0 ) = 0 THEN RETURN 6130 GOSUB *PGUI_GET_MOUSE_POS ' マウスの座標を取得 6140 PGUI_DUMMY = MOUSE( 9 ) 6150 PGUI_DUMMY = MOUSE( 10 ) 6160 GOSUB *PGUI_CHECK_MOUSE_EVENT ' マウスイベントとの当たり判定チェック 6170 IF PGUI_CRASH THEN 6180 ' 6190 PGUI_SYS$ = "EVENT" : PGUI_MOUSE$ = "INPACT" 6200 GOSUB *PGUI_EVENT_ACTIVE 6210 GOSUB *PGUI_PARTS_ACTIVE 6220 PGUI_ON = -1 6230 LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF 6240 'gosub *pgui_parts_access 6250 ' 6260 PGUI_RELEASE_FLAG = MOUSE( 6 , 0 ) 6270 WHILE PGUI_RELEASE_FLAG = 0 AND PGUI_OCCER_EVENT = 0 6280 GOSUB *PGUI_DRAG 6290 PGUI_RELEASE_FLAG = MOUSE( 6 , 0 ) 6300 WEND 6310 ' 6320 IF PGUI_ON THEN 6330 LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF 6340 ELSE 6350 GOSUB *PGUI_REFRESH 6360 ENDIF 6370 PGUI_ON = 0 6380 ' 6390 IF PGUI_RETURN$ = "上に1つスクロール" THEN 6400 PGUI_PARTS_NO = PGUI_DATA& : GOSUB *PGUI_PARTS_ACTIVE 6410 PGUI_DIRECTION_Y = 1 6420 GOSUB *PGUI_LIST_SCROLL : GOSUB *PGUI_REFRESH 6430 ELSE 6440 IF PGUI_RETURN$ = "下に1つスクロール" THEN 6450 PGUI_PARTS_NO = PGUI_DATA& : GOSUB *PGUI_PARTS_ACTIVE 6460 PGUI_DIRECTION_Y = -1 6470 GOSUB *PGUI_LIST_SCROLL : GOSUB *PGUI_REFRESH 6480 ENDIF 6490 ENDIF 6500 ENDIF 6510 RETURN 6520 ' 6530 *PGUI_DRAG ' *pgui のドラッグルーチン部 6540 PGUI_MOUSE_DX = MOUSE( 9 ) 6550 PGUI_MOUSE_DY = MOUSE( 10 ) 6560 ' 6570 IF PGUI_MOUSE_DX OR PGUI_MOUSE_DY THEN 6580 ' 6590 PGUI_MOUSE_X = PGUI_MOUSE_X + PGUI_MOUSE_DX 6600 PGUI_MOUSE_Y = PGUI_MOUSE_Y + PGUI_MOUSE_DY 6610 PGUI_MOUSE_WX = PGUI_MOUSE_X - PGUI_WIN_SX 6620 PGUI_MOUSE_WY = PGUI_MOUSE_Y - PGUI_WIN_SY 6630 ' 6640 IF PGUI_DRAG THEN 6650 ' 6660 ELSE 6670 ' 6680 PGUI_EVENT_B_NO = PGUI_EVENT_NO 6690 GOSUB *PGUI_CHECK_MOUSE_EVENT 6700 IF PGUI_CRASH AND PGUI_PARTS_NO = PGUI_EVENT&( PGUI_OFFSET& + 4 ) THEN 6710 ' 6720 IF PGUI_EVENT_NO <> PGUI_EVENT_B_NO THEN 6730 ' 6740 IF PGUI_ON THEN 6750 ' 6760 PGUI_SYS$ = "RELEASE" 6770 LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF 6780 'GOSUB *PGUI_PARTS_ACCESS 6790 PGUI_ON = 0 6800 ' 6810 ENDIF 6820 ' 6830 GOSUB *PGUI_EVENT_ACTIVE 6840 PGUI_ME_X = PGUI_MOUSE_WX - PGUI_EVSX 6850 PGUI_ME_Y = PGUI_MOUSE_WY - PGUI_EVSY 6860 PGUI_SYS$ = "INPACT" 6870 LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF 6880 'GOSUB *PGUI_PARTS_ACCESS 6890 PGUI_ON = -1 6900 ' 6910 ENDIF 6920 ' 6930 ELSE 6940 ' 6950 IF PGUI_ON THEN 6960 ' 6970 LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF 6980 PGUI_ON = 0 6990 ' 7000 ENDIF 7010 ENDIF 7020 ENDIF 7030 ENDIF 7040 RETURN 7050 ' 7060 *PGUI_GET_MOUSE_POS 7070 PGUI_MOUSE_X = MOUSE( 4 , 0 ) ' マウスのVRAM座標 7080 PGUI_MOUSE_Y = MOUSE( 5 , 0 ) 7090 PGUI_MOUSE_WX = PGUI_MOUSE_X - PGUI_WIN_SX ' マウスのウィンドウ内座標 7100 PGUI_MOUSE_WY = PGUI_MOUSE_Y - PGUI_WIN_SY 7110 RETURN 7120 ' 7130 *PGUI_EVENT_ACTIVE 7140 PGUI_EVSX = PGUI_EVENT&( PGUI_OFFSET& ) : PGUI_EVSY = PGUI_EVENT&( PGUI_OFFSET& + 1 ) 7150 PGUI_EVEX = PGUI_EVENT&( PGUI_OFFSET& + 2 ) : PGUI_EVEY = PGUI_EVENT&( PGUI_OFFSET& + 3 ) 7160 PGUI_EVWX = PGUI_EVEX - PGUI_SX + 1 : PGUI_EVWY = PGUI_EVEY - PGUI_SY + 1 7170 PGUI_PARTS_NO = PGUI_EVENT&( PGUI_OFFSET& + 4 ) 7180 PGUI_CALL_PRA& = PGUI_EVENT&( PGUI_OFFSET& + 5 ) 7190 PGUI_DRAG = PGUI_EVENT&( PGUI_OFFSET& + 6 ) 7200 RETURN 7210 ' 7220 *PGUI_CHECK_MOUSE_EVENT 7230 PGUI_EVENT_NO = PGUI_EVENT&( PGUI_EVENT_OFFSET& ) - 1 7240 PGUI_OFFSET& = PGUI_EVENT_NO * PGUI_EVENT_DATA_SIZE + 1 + PGUI_EVENT_OFFSET& 7250 PGUI_CRASH = 0 7260 WHILE PGUI_CRASH = 0 AND PGUI_EVENT_NO => 0 7270 IF PGUI_MOUSE_WY <= PGUI_EVENT&( PGUI_OFFSET& + 3 ) THEN 7280 IF PGUI_MOUSE_WY => PGUI_EVENT&( PGUI_OFFSET& + 1 ) THEN 7290 IF PGUI_MOUSE_WX <= PGUI_EVENT&( PGUI_OFFSET& + 2 ) THEN 7300 IF PGUI_MOUSE_WX => PGUI_EVENT&( PGUI_OFFSET& ) THEN 7310 PGUI_CRASH = - 1 7320 ENDIF 7330 ENDIF 7340 ENDIF 7350 ENDIF 7360 PGUI_EVENT_NO = PGUI_EVENT_NO - 1 7370 PGUI_OFFSET& = PGUI_OFFSET& - PGUI_EVENT_DATA_SIZE 7380 WEND 7390 PGUI_OFFSET& = PGUI_OFFSET& + PGUI_EVENT_DATA_SIZE 7400 PGUI_EVENT_NO = PGUI_EVENT_NO + 1 7410 RETURN 7420 ' 7430 ' *PGUI_EVENT_ENTRY 7440 ' イベントデータをエントリします。 7450 ' 7460 ' PGUI_DRAG ドラッグ可能指定 7470 ' PGUI_PARTS_NO イベント発生時の呼出し部品番号 7480 ' PGUI_CALL_PRA& イベント発生時に渡すパラメータ 7490 ' PGUI_EVSX / SY / WX / WY イベント領域の大きさ / PGUI_EVENT_AS 指定時は省略可 7500 ' 7510 *PGUI_EVENT_ENTRY 7520 PGUI_EVENT&( PGUI_EVENT_OFFSET&( PGUI_WIN_ENTRY )) = PGUI_EVENT&( PGUI_EVENT_OFFSET&( PGUI_WIN_ENTRY )) + 1 7530 PGUI_CALL_PARTS_NO = PGUI_PARTS_NO 7540 IF PGUI_EVENT_AS THEN 7550 PGUI_EVSX = PGUI_E_SX : PGUI_EVSY = PGUI_E_SY 7560 PGUI_EVWX = PGUI_E_WX : PGUI_EVWY = PGUI_E_WY 7570 ENDIF 7580 PGUI_EVEX = PGUI_EVSX + PGUI_EVWX - 1 : PGUI_EVEY = PGUI_EVSY + PGUI_EVWY - 1 7590 PGUI_EVENT&( PGUI_EV_ENTRY& ) = PGUI_EVSX 7600 PGUI_EVENT&( PGUI_EV_ENTRY& + 1 ) = PGUI_EVSY 7610 PGUI_EVENT&( PGUI_EV_ENTRY& + 2 ) = PGUI_EVEX 7620 PGUI_EVENT&( PGUI_EV_ENTRY& + 3 ) = PGUI_EVEY 7630 PGUI_EVENT&( PGUI_EV_ENTRY& + 4 ) = PGUI_CALL_PARTS_NO 7640 PGUI_EVENT&( PGUI_EV_ENTRY& + 5 ) = PGUI_CALL_PRA& 7650 PGUI_EVENT&( PGUI_EV_ENTRY& + 6 ) = PGUI_DRAG 7660 PGUI_EV_ENTRY& = PGUI_EV_ENTRY& + PGUI_EVENT_DATA_SIZE 7670 PGUI_EVENT_AS = 0 : PGUI_EVENT = 0 : PGUI_DRAG = 0 7680 RETURN 7690 ' 7700 ' *PGUI_WIN_OPEN 7710 ' 7720 ' ウィンドウをオープンします。 7730 ' オープンするウィンドウは、既に登録されていなければなりません。 7740 ' 7750 ' PGUI_NAME$ オープンするウィンドウ名 7760 ' 7770 ' 7780 *PGUI_WIN_OPEN 7790 PGUI_WIN_OPEN_HISTORY = PGUI_WIN_OPEN_HISTORY + 1 7800 GOSUB *PGUI_GET_WIN_NO 7810 IF PGUI_ERROR = 41 THEN PRINT "指定のウィンドウ名 "+PGUI_NAME$+" は存在しません。" 7820 GOSUB *PGUI_WIN_ACTIVE 7830 PGUI_WIN_OPEN_HISTORY( PGUI_WIN_OPEN_HISTORY ) = PGUI_WIN_NO 7840 ' 7850 PGUI_SYS$ = "FIRST" 7860 IF PGUI_WIN_TYPE$ <> "DRAW" THEN 7870 GET@A( 0 , 0 )-( PGUI_WIN_WX_M1 , PGUI_WIN_WY_M1 ),PGUI_WIN_BUF% , PGUI_WIN_BUF_OFFSET& 7880 PGUI_WIN_BUF_OFFSET& = PGUI_WIN_BUF_OFFSET& + FNG_BUF_DIM&( PGUI_WIN_WX , PGUI_WIN_WY , PGUI_BITS_PAR_SAMPLE , 2 ) 7890 PGUI_FAST_DRAW_VOID = -1 7900 ENDIF 7910 GOSUB *PGUI_WINDOW 7920 ' 7930 IF PGUI&( PGUI_WIN_OFFSET& + 1 ) > 1 THEN 7940 FOR PGUI_PARTS_NO = 1 TO PGUI&( PGUI_WIN_OFFSET& + 1 ) - 1 7950 GOSUB *PGUI_PARTS_ACTIVE : GOSUB *PGUI_PARTS_ACCESS 7960 NEXT 7970 ENDIF 7980 RETURN 7990 ' 8000 ' *PGUI_PARTS_ACCESS 8010 ' 8020 ' 指定の部品へ分岐します。 8030 ' 8040 ' PGUI_TYPE$ 分岐する部品種類名 8050 ' 8060 *PGUI_PARTS_ACCESS 8070 IF PGUI_TYPE$ = "ICON" GOSUB *PGUI_ICON : GOTO *PGUI_P001 8080 IF PGUI_TYPE$ = "BUTTON" GOSUB *PGUI_BUTTON : GOTO *PGUI_P001 8090 IF PGUI_TYPE$ = "LETTER" GOSUB *PGUI_LETTER : GOTO *PGUI_P001 8100 IF PGUI_TYPE$ = "LIST MENU" GOSUB *PGUI_LIST_MENU : GOTO *PGUI_P001 8110 IF PGUI_TYPE$ = "SCROLL BAR" GOSUB *PGUI_SCROLL_BAR : GOTO *PGUI_P001 8120 IF PGUI_TYPE$ = "SCROLL LIST MENU" GOSUB *PGUI_SCROLL_LIST_MENU : GOTO *PGUI_P001 8130 *PGUI_P001 8140 RETURN 8150 ' 8160 ' *PGUI_WINDOW 8170 ' 8180 ' ウィンドウ枠の登録・表示等を管理します。 8190 ' 8200 *PGUI_WINDOW 8210 IF PGUI_SYS$ = "FIRST" THEN 8220 PGUI_DRAW$ = PGUI_FORM$ 8230 IF PGUI_FORM$ = "ROUND" THEN PGUI_DRAW_R = 12 8240 IF PGUI_FORM$ <> "" THEN GOSUB *PGUI_DRAW 8250 ENDIF 8260 IF PGUI_SYS$ = "ENTRY" THEN 8270 PGUI_WIN_ENTRY = PGUI_WIN_ENTRY + 1 8280 PGUI_PARTS_NO_ENTRY = 0 8290 ' 8300 PGUI_WIN_OFFSET& = PGUI_PARTS_ENTRY& 8310 PGUI_WIN_OFFSET&( PGUI_WIN_ENTRY ) = PGUI_WIN_OFFSET& 8320 PGUI&( PGUI_WIN_OFFSET& ) = PGUI_CHAR_ENTRY& 8330 PGUI$( PGUI_CHAR_ENTRY& ) = PGUI_NAME$ 8340 PGUI_PARTS_ENTRY& = PGUI_PARTS_ENTRY& + PGUI_WIN_HEADER_SIZE 8350 PGUI_CHAR_ENTRY& = PGUI_CHAR_ENTRY& + 1 8360 ' 8370 GOSUB *PGUI_POS_CALC 8380 PGUI_EVENT_OFFSET&( PGUI_WIN_ENTRY ) = PGUI_EV_ENTRY& 8390 PGUI_EV_ENTRY& = PGUI_EV_ENTRY& + 1 8400 ' 8410 PGUI_EVSX = 0 : PGUI_EVSY = 0 : PGUI_EVWX = PGUI_WX : PGUI_EVWY = PGUI_WY 8420 PGUI_EVENT = -1 : PGUI_DRAG = 1 8430 ENDIF 8440 RETURN 8450 ' 8460 ' *PGUI_ICON 8470 ' 8480 ' アイコンを管理します。 8490 ' 8500 *PGUI_ICON 8510 IF PGUI_SYS$ = "FIRST" THEN 8520 PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY 8530 PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY 8540 IF PGUI_FORM$ = "24DOT" THEN GOSUB *PGUI_DRAW_ICON24 ELSE GOSUB *PGUI_DRAW_ICON12 8550 ENDIF 8560 IF PGUI_SYS$ = "ENTRY" THEN 8570 IF PGUI_TYPE$ = "ICON24" THEN 8580 PGUI_FORM$ = "24DOT" : PGUI_E_WX = 24 : PGUI_E_WY = 24 8590 ELSE 8600 PGUI_FORM$ = "12DOT" : PGUI_E_WX = 12 : PGUI_E_WY = 12 8610 ENDIF 8620 PGUI_E_TYPE$ = "ICON" 8630 ENDIF 8640 RETURN 8650 ' 8660 ' *PGUI_LETTER 8670 ' 8680 ' ローカルフォントで文字を表示します。 8690 ' 8700 *PGUI_LETTER 8710 IF PGUI_SYS$ = "FIRST" THEN 8720 IF PGUI_DISP$ = "" THEN RETURN 8730 PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY 8740 IF PGUI_FORM$ = "SYSTEM12" THEN 8750 SYMBOL( PGUI_DRAW_SX , PGUI_DRAW_SY ),PGUI_DISP$,PGUI_SYMBOL_M!,PGUI_SYMBOL_M! 8760 ELSE 8770 PGUI_DRAW_WX = 12 : PGUI_DRAW_WY = 12 8780 PGUI_LETTER_SX = PGUI_SX 8790 FOR PGUI_WORK_I = 1 TO LEN( PGUI_DISP$ ) 8800 PGUI_LETTER$ = MID$( PGUI_DISP$ , PGUI_WORK_I , 1 ) 8810 IF PGUI_LETTER$ <> " " THEN 8820 PGUI_DATA& = ASC( PGUI_LETTER$ ) + 12 '- 48 + 60 8830 PGUI_DRAW_SX = PGUI_LETTER_SX 8840 GOSUB *PGUI_DRAW_ICON12 8850 ENDIF 8860 PGUI_LETTER_SX = PGUI_LETTER_SX + 12 8870 NEXT 8880 ENDIF 8890 ENDIF 8900 IF PGUI_SYS$ = "ENTRY" THEN 8910 PGUI_E_EY = 12 8920 IF PGUI_FORM$ = "SYSTEM12" THEN PGUI_E_WX = 6 ELSE PGUI_E_WX = 12 8930 ENDIF 8940 RETURN 8950 ' 8960 ' *PGUI_BUTTON 8970 ' 8980 ' ボタンを管理します。 8990 ' 9000 ' PGUI_SX / SY / WX / WY / DISP$ 9010 ' FORM$ = "ROUND" / "SQUARE" / "CLOSE" / "3D" / "SIMPLE 3D" 9020 ' 9030 *PGUI_BUTTON 9040 IF PGUI_SYS$ = "FIRST" THEN 9050 PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY 9060 PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY 9070 ' 9080 IF PGUI_FORM$ = "ROUND" THEN PGUI_DRAW$ = "ROUND" : PGUI_DRAW_R = 4 9090 IF PGUI_FORM$ = "SQUARE" THEN PGUI_DRAW$ = "RECTANGLE" 9100 IF PGUI_FORM$ = "CLOSE" THEN PGUI_DRAW$ = "CLOSE" 9110 IF PGUI_FORM$ = "3D" THEN PGUI_DRAW$ = "3D" : PGUI_HEIGHT = 2 9120 IF PGUI_FORM$ = "SIMPLE 3D" THEN PGUI_DRAW$="SIMPLE 3D" : PGUI_HEIGHT = 2 9130 GOSUB *PGUI_DRAW 9140 ' 9150 SYMBOL( PGUI_DRAW_SX + PGUI_DISP_SX , PGUI_DRAW_SY + PGUI_DISP_SY ),PGUI_DISP$,PGUI_SYMBOL_M!,PGUI_SYMBOL_M! 9160 ENDIF 9170 IF PGUI_SYS$ = "ENTRY" THEN 9180 PGUI_DISP_WX = PGUI_FONT_WX * LEN( PGUI_DISP$ ) 9190 PGUI_E_WX = PGUI_WX : PGUI_E_WY = PGUI_WY 9200 IF PGUI_WX = 0 THEN PGUI_SPACE_X = 12 : PGUI_E_WX = PGUI_DISP_WX + PGUI_SPACE_X * 2 9210 IF PGUI_WY = 0 THEN PGUI_SPACE_Y = 4 : PGUI_E_WY = PGUI_FONT_WY + PGUI_SPACE_Y * 2 9220 IF PGUI_FORM$ = "CLOSE" THEN PGUI_SX = 2 : PGUI_SY = 2 : PGUI_E_WX = 12 : PGUI_E_WY = 12 9230 PGUI_DISP_SX = INT( PGUI_E_WX - PGUI_DISP_WX )/ 2 9240 PGUI_DISP_SY = INT( PGUI_E_WY - PGUI_FONT_WY )/ 2 9250 PGUI_EVENT_AS = -1 9260 ENDIF 9270 RETURN 9280 ' 9290 ' *PGUI_SCROLL_LIST_MENU ( Hybrid parent ) 9300 ' 9310 ' スクロールバー付リストメニューを管理します。 9320 ' 9330 ' TYPE$ = "SCROLL LIST MENU" 9340 ' SX / SY / WX / DISP_WY 9350 ' START_Y / LIST_BUF_SIZE / MAX_Y / MIN_Y 9360 ' 9370 ' RETURN$ 9380 ' 9390 ' 9400 *PGUI_SCROLL_LIST_MENU 9410 IF PGUI_SYS$ = "UPDATE" THEN 9420 ' 9430 ' 9440 ' 9450 ' 9460 ' 9470 ENDIF 9480 IF PGUI_SYS$ = "ENTRY" THEN 9490 GOSUB *PGUI_ENTRY_WORK 9500 ' 9510 PGUI_SCROLL_LIST_MENU_WORK_NO& = PGUI_PARTS_NO_ENTRY 9520 PGUI_TYPE$ = "LIST MENU" 9530 PGUI_START_Y = 0 9540 GOSUB *PGUI_ENTRY 9550 ' 9560 PGUI_TYPE$ = "SCROLL BAR" 9570 PGUI_SX = PGUI_SX + PGUI_WX + 2 9580 PGUI_WX = 16 : PGUI_WY = PGUI_DISP_SY*2 + PGUI_DISP_WY * ( PGUI_FONT_WY + PGUI_LINE_SPACE ) 9590 GOSUB *PGUI_ENTRY 9600 ENDIF 9610 RETURN 9620 ' 9630 ' *PGUI_LIST_MENU 9640 ' 9650 ' リストメニューを管理します。 9660 ' 9670 ' PGUI_FORM$ "MENU" 選択可能 / "VIEW" 閲覧のみ 9680 ' PGUI_SX / SY リスト表示位置(ウィンドウ内座標) 9690 ' PGUI_MAX_Y 総項目数 9700 ' PGUI_DISP_WY 表示項目行数(デフォルトは10行) 9710 ' PGUI_START_Y 何行目から表示するか 9720 ' PGUI_LIST_BUF_SIZE& 確保するリストデーター格納用領域の大きさ(単位は行) 9730 ' 9740 '<RETURN> 9750 ' PGUI_LIST_OFFSET& リストデーター格納先頭オフセット 9760 '<AFTER> 9770 ' PGUI_LIST$(x) リストデーター格納用変数 9780 ' 9790 *PGUI_LIST_MENU 9800 IF PGUI_SYS$ = "EVENT" THEN 9810 ' 9820 ' 9830 ' 9840 ' 9850 ' 9860 ' 9870 ENDIF 9880 IF PGUI_SYS$ = "UPDATE" THEN 9890 ' 9900 ' 9910 ' 9920 ' 9930 ' 9940 ENDIF 9950 IF PGUI_SYS$ = "FIRST" THEN 9960 PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY 9970 PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY 9980 PGUI_DRAW$ = "SQUARE" 9990 GOSUB *PGUI_DRAW 10000 ' 10010 PGUI_WORK_SX = PGUI_SX + PGUI_DISP_SX : PGUI_WORK_SY = PGUI_SY + PGUI_DISP_SY 10020 PGUI_WORK_ADD = PGUI_FONT_WY + PGUI_LINE_SPACE 10030 FOR PGUI_Y = 0 TO PGUI_DISP_WY - 1 10040 PGUI_WORK = PGUI_START_Y + PGUI_Y 10050 IF PGUI_WORK < PGUI_MAX_Y THEN 10060 SYMBOL(PGUI_WORK_SX,PGUI_WORK_SY),PGUI_LIST$( PGUI_LIST_OFFSET&+PGUI_WORK ),PGUI_SYMBOL_M!,PGUI_SYMBOL_M! 10070 PGUI_WORK_SY = PGUI_WORK_SY + PGUI_WORK_ADD 10080 ENDIF 10090 NEXT 10100 ENDIF 10110 IF PGUI_SYS$ = "ENTRY" THEN 10120 IF PGUI_DISP_WY = 0 THEN PGUI_DISP_WY = 10 10130 PGUI_LINE_SPACE = 2 : PGUI_DISP_SX = 2 : PGUI_DISP_SY = 2 10140 PGUI_E_WY = PGUI_DISP_SY * 2 + PGUI_DISP_WY * ( PGUI_FONT_WY + PGUI_LINE_SPACE ) 10150 IF PGUI_FORM$ = "MENU" THEN 10160 PGUI_EVSX = PGUI_SX + PGUI_DISP_SX : PGUI_EVWX = PGUI_WX - 1 - PGUI_DISP_SX 10170 PGUI_EVWY = PGUI_FONT_WY + PGUI_LINE_SPACE 10180 PGUI_EVSY = PGUI_SY + PGUI_DISP_SY + PGUI_EVWY * ( PGUI_DISP_WY - 1 ) 10190 FOR PGUI_LIST_MENU_WORK = PGUI_DISP_WY - 1 TO 0 STEP - 1 10200 PGUI_CALL_PRA& = PGUI_LIST_MENU_WORK 10210 GOSUB *PGUI_EVENT_ENTRY 10220 PGUI_EVSY = PGUI_EVSY - PGUI_EVWY 10230 NEXT 10240 ENDIF 10250 ENDIF 10260 RETURN 10270 ' 10280 ' *PGUI_SCROLL_BAR ( Hybrid parent ) 10290 ' 10300 ' スクロールバーを管理します。 10310 ' 10320 ' PGUI_FORM$ "FLUENT" / "MOUSE RELEASE" 10330 ' PGUI_MAX_Y 最大項目番号 10340 ' PGUI_DISP_WY アクティブ項目数 10350 ' PGUI_START_Y 現在の先頭項目番号 10360 ' 10370 *PGUI_SCROLL_BAR 10380 IF PGUI_SYS$ = "FIRST" THEN 10390 PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY 10400 PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY - PGUI_WX * 2 + 1 10410 PGUI_DRAW$ = "RECTANGLE" 10420 GOSUB *PGUI_DRAW 10430 ' 10440 PGUI_DRAW_SX = PGUI_DRAW_SX + 1 : PGUI_DRAW_SY = PGUI_DRAW_SY + 1 10450 PGUI_DRAW_WX = PGUI_DRAW_WX - 2 : PGUI_DRAW_WY = PGUI_DRAW_WY - 2 10460 PGUI_DRAW_HEIGHT = 2 10470 PGUI_DRAW$ = "SIMPLE 3D" 10480 GOSUB *PGUI_DRAW 10490 ENDIF 10500 IF PGUI_SYS$ = "ENTRY" THEN 10510 GOSUB *PGUI_ENTRY_WORK 10520 ' 10530 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "SIMPLE 3D" 10540 PGUI_RETURN$ = "上に1つスクロール" 10550 PGUI_SY = PGUI_SY + PGUI_WY - PGUI_WX : PGUI_WY = PGUI_WX 10560 PGUI_LINK_PARTS_NO = PGUI_PARTS_NO 10570 PGUI_DATA& = PGUI_SCROLL_LIST_MENU_WORK_NO& 10580 GOSUB *PGUI_ENTRY 10590 ' 10600 PGUI_RETURN$ = "下に1つスクロール" 10610 PGUI_SY = PGUI_SY - PGUI_WX 10620 GOSUB *PGUI_ENTRY 10630 ' 10640 PGUI_TYPE$ = "ICON12" 10650 PGUI_SX = PGUI_SX + (( PGUI_WX - 12 ) / 2 ) 10660 PGUI_SY = PGUI_SY + (( PGUI_WY - 12 ) / 2 ) : PGUI_DATA& = 0 10670 GOSUB *PGUI_ENTRY 10680 ' 10690 PGUI_SY = PGUI_SY + PGUI_WX : PGUI_DATA& = 1 10700 GOSUB *PGUI_ENTRY 10710 ENDIF 10720 RETURN 10730 ' 10740 ' *PGUI_WIN_ACTIVE 10750 ' 10760 ' 指定した番号のウィンドウをアクティブにします。 10770 ' 10780 ' PGUI_WIN_NO アクティブにするウィンドウ番号 10790 '<RETURN> 10800 ' PGUI_WIN_NAME$ ウィンドウ名 10810 ' PGUI_WIN_OFFSET& ウィンドウのデーターオフセット 10820 ' PGUI_EVENT_OFFSET& イベントデータのオフセット 10830 ' 10840 *PGUI_WIN_ACTIVE 10850 PGUI_WIN_OFFSET& = PGUI_WIN_OFFSET&( PGUI_WIN_NO ) 10860 PGUI_NAME$ = PGUI$( PGUI&( PGUI_WIN_OFFSET& )) 10870 PGUI_EVENT_OFFSET& = PGUI_EVENT_OFFSET&( PGUI_WIN_NO ) 10880 ' 10890 PGUI_PARTS_NO = 0 10900 GOSUB *PGUI_PARTS_ACTIVE 10910 ' 10920 PGUI_WIN_SX = PGUI_SX : PGUI_WIN_SY = PGUI_SY 10930 PGUI_WIN_WX = PGUI_WX : PGUI_WIN_WY = PGUI_WY 10940 PGUI_WIN_WX_M1 = PGUI_WX - 1 : PGUI_WIN_WY_M1 = PGUI_WY - 1 10950 PGUI_WIN_EX = PGUI_SX + PGUI_WIN_WX_M1 : PGUI_WIN_EY = PGUI_SY + PGUI_WIN_WY_M1 10960 IF PGUI_DATA& THEN PGUI_WIN_TYPE$ = "DRAW" ELSE PGUI_WIN_TYPE$ = "BUFFERING" 10970 ' 10980 PGUI_DRAW_SX = 0 : PGUI_DRAW_SY = 0 10990 PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY 11000 GOSUB *PGUI_DRAW_WIN_SET 11010 PGUI_WIN_OUT = PGUI_OUT OR PGUI_VIEW_DSX OR PGUI_VIEW_DSY OR PGUI_VIEW_DEX OR PGUI_VIEW_DEY 11020 RETURN 11030 ' 11040 ' *PGUI_GET_WIN_NO 11050 ' 11060 ' ウィンドウ名からウィンドウ番号を検索します。 11070 ' PGUI_NAME$ 検索するウィンドウ名 11080 '<RETURN> 11090 ' PGUI_WIN_NO ウィンドウ番号 11100 ' 11110 *PGUI_GET_WIN_NO 11120 PGUI_WIN_NO = 0 : PGUI_WORK$ = "" : PGUI_ERROR = 0 11130 WHILE ( PGUI_WIN_NO <> PGUI_WIN_ENTRY + 1 ) AND ( PGUI_NAME$ <> PGUI_WORK$ ) 11140 PGUI_WIN_NO = PGUI_WIN_NO + 1 11150 PGUI_WIN_OFFSET& = PGUI_WIN_OFFSET&( PGUI_WIN_NO ) 11160 PGUI_WORK$ = PGUI$( PGUI&( PGUI_WIN_OFFSET& )) 11170 WEND 11180 IF PGUI_WIN_NO = PGUI_WIN_ENTRY + 1 THEN PGUI_ERROR = 41 11190 RETURN 11200 ' 11210 ' *PGUI_WIN_CLOSE 11220 ' 11230 ' ウィンドウをクローズします。 11240 ' 11250 *PGUI_WIN_CLOSE 11260 IF PGUI_WIN_TYPE$ <> "DRAW" THEN 11270 PGUI_WIN_BUF_OFFSET& = PGUI_WIN_BUF_OFFSET& - FNG_BUF_DIM&( PGUI_WIN_WX , PGUI_WIN_WY , PGUI_BITS_PAR_SAMPLE , 2 ) 11280 PUT@A( 0 , 0 )-( PGUI_WIN_WX_M1 , PGUI_WIN_WY_M1 ),PGUI_WIN_BUF%,,,,,PGUI_WIN_BUF_OFFSET& 11290 PGUI_FAST_DRAW_VOID = -1 11300 ENDIF 11310 GOSUB *PGUI_DRAW_WIN_RETURN 11320 ' 11330 PGUI_WIN_OPEN_HISTORY = PGUI_WIN_OPEN_HISTORY - 1 11340 PGUI_WIN_NO = PGUI_WIN_OPEN_HISTORY( PGUI_WIN_OPEN_HISTORY ) 11350 GOSUB *PGUI_WIN_ACTIVE 11360 RETURN 11370 ' 11380 ' *PGUI_DRAW_WIN_SET 11390 ' GUIウィンドウ内座標に、部品描画用ウィンドウ座標を設定します。 11400 ' PGUI_DRAW_SX / SY 11410 ' PGUI_DRAW_WX / WY 11420 ' 11430 *PGUI_DRAW_WIN_SET 11440 PGUI_DRAW_EX = PGUI_DRAW_SX + PGUI_DRAW_WX - 1 11450 PGUI_DRAW_EY = PGUI_DRAW_SY + PGUI_DRAW_WY - 1 11460 ' 11470 GOSUB *PGUI_DRAW_WIN_WORK 11480 ' 11490 PGUI_DRAW_WIN_NO = PGUI_DRAW_WIN_NO + 1 11500 PGUI_DRAW_WIN_WORK = PGUI_DRAW_WIN_NO * 4 11510 PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK ) = PGUI_DRAW_SX 11520 PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 1 ) = PGUI_DRAW_SY 11530 PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 2 ) = PGUI_DRAW_EX 11540 PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 3 ) = PGUI_DRAW_EY 11550 RETURN 11560 ' 11570 ' *PGUI_DRAW_WIN_RETURN 11580 ' 部品描画用ウィンドウ座標を復元します。 11590 ' 11600 *PGUI_DRAW_WIN_RETURN 11610 PGUI_DRAW_WIN_NO = PGUI_DRAW_WIN_NO - 1 11620 PGUI_DRAW_WIN_WORK = PGUI_DRAW_WIN_NO * 4 11630 PGUI_DRAW_SX = PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK ) 11640 PGUI_DRAW_SY = PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 1 ) 11650 PGUI_DRAW_EX = PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 2 ) 11660 PGUI_DRAW_EY = PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 3 ) 11670 ' 11680 PGUI_DRAW_WX = PGUI_DRAW_EX - PGUI_DRAW_SX + 1 11690 PGUI_DRAW_WY = PGUI_DRAW_EY - PGUI_DRAW_SY + 1 11700 ' 11710 GOSUB *PGUI_DRAW_WIN_WORK 11720 RETURN 11730 ' 11740 ' *PGUI_DRAW_WIN_WORK 11750 ' 11760 ' 部品描画用ウィンドウを設定します 11770 ' (VRAM外に設定した場合も考慮しています) 11780 ' 11790 *PGUI_DRAW_WIN_WORK 11800 PGUI_VIEW_SX = PGUI_DRAW_SX + PGUI_WIN_SX 11810 PGUI_VIEW_SY = PGUI_DRAW_SY + PGUI_WIN_SY 11820 PGUI_VIEW_EX = PGUI_DRAW_EX + PGUI_WIN_SX 11830 PGUI_VIEW_EY = PGUI_DRAW_EY + PGUI_WIN_SY 11840 PGUI_OUT = ( PGUI_VIEW_SX > PGUI_RESO_X_M1 ) OR ( PGUI_VIEW_SY > PGUI_RESO_Y_M1 ) OR ( PGUI_VIEW_EX < 0 ) OR ( PGUI_VIEW_EY < 0 ) 11850 IF PGUI_OUT THEN 11860 WINDOW( 32768 , 32768 )-( 32768 + PGUI_RESO_X_M1 , 32768 + PGUI_RESO_Y_M1 ) 11870 ELSE 11880 PGUI_VIEW_DEX = 0 : PGUI_VIEW_DEY = 0 11890 IF PGUI_VIEW_SX < 0 THEN PGUI_VIEW_DSX = - PGUI_VIEW_SX ELSE PGUI_VIEW_DSX = 0 11900 IF PGUI_VIEW_SY < 0 THEN PGUI_VIEW_DSY = - PGUI_VIEW_SY ELSE PGUI_VIEW_DSY = 0 11910 IF PGUI_VIEW_EX > PGUI_RESO_X_M1 THEN PGUI_VIEW_DEX = PGUI_VIEW_EX - PGUI_RESO_X_M1 11920 IF PGUI_VIEW_EY > PGUI_RESO_Y_M1 THEN PGUI_VIEW_DEY = PGUI_VIEW_EY - PGUI_RESO_Y_M1 11930 WINDOW( PGUI_VIEW_DSX , PGUI_VIEW_DSY )-( PGUI_DRAW_WX - 1 - PGUI_VIEW_DEX , PGUI_DRAW_WY - 1 - PGUI_VIEW_DEY ) 11940 VIEW( PGUI_VIEW_SX + PGUI_VIEW_DSX , PGUI_VIEW_SY + PGUI_VIEW_DSY )-( PGUI_VIEW_EX - PGUI_VIEW_DEX , PGUI_VIEW_EY - PGUI_VIEW_DEY ) 11950 ENDIF 11960 RETURN 11970 ' 11980 ' *PGUI_ENTRY 11990 ' 12000 ' 部品登録の窓口です。ハイブリッド部品は、内部で複数の単独部品に変換されます。 12010 ' 日本語等で感覚的に指定したGUIデーターを、内部形式にコンバート 12020 ' します。 12030 ' 12040 ' 位置・サイズはコンピュータに決めさせれる場合もあります。 12050 ' 12060 ' PGUI_TYPE$ 部品の種類 12070 ' "WINDOW" 12080 ' "SCROLL BAR" / "LIST MENU" / "BUTTON" / "SWITCH" 12090 ' "SCROLL LIST MENU" / "ICON12" / "ICON24" 12100 ' "INPUT CHAR" 12110 ' PGUI_FORM$ 部品の形 12120 ' PGUI_NAME$ 部品の固有名(省略可) 12130 ' PGUI_LINK$ リンク時のパラメータ(省略可) 12140 ' PGUI_DISP$ 部品に表示する文字列 12150 ' PGUI_POS$ 部品の配置場所(文字列指定の場合) 12160 ' 12170 ' PGUI_SX / SY 部品のウィンドウ内座標(省略可能な場合もある) 12180 ' PGUI_WX / WY 部品の大きさ(省略可能な場合もある) 12190 ' PGUI_MIN_X / Y 表示(選択)可能最小項目番号(数値) 12200 ' PGUI_MAX_X / Y 表示(選択)可能最大項目番号(数値) 12210 ' PGUI_START_X / Y 表示開始項目番号 12220 ' PGUI_DISP_WX / WY 表示する大きさ 12230 ' 12240 ' PGUI_LIST_BUF_SIZE& 確保するテキストデーター格納領域の大きさを設定します。(単位は行) 12250 ' PGUI_LIST_OFFSET& テキストデーター格納領域の先頭オフセットを返します。 12260 ' (プログラマーが設定する必要はありません。) 12270 ' 12280 ' PGUI_RETURN$ 部品が返す文字列(LINK$ > DISP$ > NAME$ が返る) 12290 ' PGUI_RETURN 部品が返す数値 12300 ' 12310 ' 保持変数名 12320 ' 12330 ' PGUI_WIN_PARTS_OFFSET&(x) データーの先頭オフセット 12340 ' PGUI&(x) 部品データー格納変数 12350 ' PGUI$(x) 部品データー中の文字列格納領域 12360 ' 12370 *PGUI_ENTRY 12380 PGUI_SYS$ = "ENTRY" 12390 IF PGUI_HYBRID_PARENT THEN PGUI_HYBRID_CHILD = -1 ELSE PGUI_HYBRID_CHILD = 0 12400 IF PGUI_HYBRID_NO = 0 THEN 12410 PGUI_HYBRID_MASTER = PGUI_PARTS_NO_ENTRY 12420 PGUI_MASTER_OFFSET& = PGUI_PARTS_ENTRY& 12430 ENDIF 12440 PGUI_HYBRID_NO = PGUI_HYBRID_NO + 1 12450 PGUI_HYBRID( PGUI_HYBRID ) = PGUI_PARTS_NO_ENTRY 12460 PGUI_HYBRID_PARENT = 0 12470 IF PGUI_TYPE$ = "BUTTON" GOSUB *PGUI_BUTTON : GOTO *PGUI_P1 12480 IF PGUI_TYPE$ = "ICON12" GOSUB *PGUI_ICON : GOTO *PGUI_P1 12490 IF PGUI_TYPE$ = "ICON24" GOSUB *PGUI_ICON : GOTO *PGUI_P1 12500 IF PGUI_TYPE$ = "LETTER" GOSUB *PGUI_LETTER : GOTO *PGUI_P1 12510 IF PGUI_TYPE$ = "WINDOW" GOSUB *PGUI_WINDOW : GOTO *PGUI_P1 12520 IF PGUI_TYPE$ = "LIST MENU" GOSUB *PGUI_LIST_MENU : GOTO *PGUI_P1 12530 PGUI_HYBRID_PARENT = -1 12540 IF PGUI_TYPE$ = "SCROLL BAR" GOSUB *PGUI_SCROLL_BAR : GOTO *PGUI_P2 12550 IF PGUI_TYPE$ = "SCROLL LIST MENU" GOSUB *PGUI_SCROLL_LIST_MENU : GOTO *PGUI_P2 12560 'GOSUB *PGUI_ENTRY_HYBRID 12570 COLOR 1 : PRINT "指定の部品種類名 「 "+PGUI_TYPE$+" 」 は、サポートされていません。":END 12580 *PGUI_P1 12590 GOSUB *PGUI_ENTRY_WORK 12600 *PGUI_P2 12610 PGUI_HYBRID_NO = PGUI_HYBRID_NO - 1 12620 RETURN 12630 ' 12640 ' *PGUI_ENTRY_WORK 12650 ' 12660 ' ハイブリッド部品登録用の苦し紛れのサブルーチン 12670 ' 12680 *PGUI_ENTRY_WORK 12690 PGUI_PARTS_NO = PGUI_PARTS_NO_ENTRY 12700 PGUI_PARTS_OFFSET& = PGUI_PARTS_ENTRY& 12710 PGUI_CHAR_OFFSET& = PGUI_CHAR_ENTRY& 12720 PGUI_ENTRY_FLAG = -1 : GOSUB *PGUI_PARTS_DATA_REGISTRATION : PGUI_ENTRY_FLAG = 0 12730 IF PGUI_EVENT_AS OR PGUI_EVENT THEN GOSUB *PGUI_EVENT_ENTRY 12740 PGUI_E_SX = -1 : PGUI_E_SY = -1 : PGUI_E_WX = -1 : PGUI_E_WY = -1 12750 PGUI_PARTS_NO_ENTRY = PGUI_PARTS_NO_ENTRY + 1 12760 PGUI&( PGUI_WIN_OFFSET& + 1 ) = PGUI_PARTS_NO_ENTRY 12770 PGUI_PARTS_ENTRY& = PGUI_PARTS_ENTRY& + PGUI_PARTS_DATA_SIZE 12780 PGUI_CHAR_ENTRY& = PGUI_CHAR_ENTRY& + PGUI_CHAR_DATA_SIZE 12790 IF PGUI_HYBRID = 1 THEN 12800 PGUI_LIST_ENTRY& = PGUI_LIST_ENTRY& + PGUI_LIST_BUF_SIZE& 12810 ENDIF 12820 PGUI_NAME$ = "":PGUI_RETURN$ = "" 12830 RETURN 12840 ' 12850 ' *PGUI_REFRESH 12860 ' 12870 ' 窓口変数を初期状態にします。 12880 ' 12890 *PGUI_REFRESH 12900 PGUI_TYPE$ = "" : PGUI_FORM$ = "" : PGUI_NAME$ = "" : PGUI_DISP$ = "" 12910 PGUI_PRA$ = "" : PGUI_POS$ = "" : PGUI_DISP_POS$ = "" : PGUI_RETURN$ = "" 12920 PGUI_SX = 0 : PGUI_SY = 0 : PGUI_WX = 0 : PGUI_WY = 0 : PGUI_DATA& = 0 12930 PGUI_E_SX = -1 : PGUI_E_SY = -1 : PGUI_E_WX = -1 : PGUI_E_WY = -1 12940 RETURN 12950 ' 12960 ' *PGUI_PARTS_DATA_REGISTRATION 12970 ' 12980 ' 窓口上の部品データーを内部形式で格納します。 12990 ' 13000 ' PGUI_PARTS_OFFSET& 部品データーの格納オフセット 13010 ' PGUI_CHAR_OFFSET& 文字データーオフセット 13020 ' 13030 *PGUI_PARTS_DATA_REGISTRATION 13040 PGUI_WORK& = PGUI_PARTS_OFFSET& 13050 IF PGUI_ENTRY_FLAG THEN 13060 PGUI$( PGUI_CHAR_OFFSET& + 0 ) = PGUI_NAME$ 13070 IF PGUI_E_TYPE$ = "" THEN PGUI_E_TYPE$ = PGUI_TYPE$ 13080 PGUI$( PGUI_CHAR_OFFSET& + 1 ) = PGUI_E_TYPE$ : PGUI_E_TYPE$ = "" 13090 PGUI$( PGUI_CHAR_OFFSET& + 2 ) = PGUI_FORM$ 13100 PGUI&( PGUI_WORK& ) = PGUI_CHAR_ENTRY& 13110 PGUI&( PGUI_WORK& + PGUI_OF_LIST_OFFSET ) = PGUI_LIST_ENTRY& 13120 PGUI&( PGUI_WORK& + PGUI_OF_LIST_BUF_SIZE ) = PGUI_LIST_BUF_SIZE& 13130 PGUI&( PGUI_WORK& + 3 ) = ABS( PGUI_HYBRID_CHILD + PGUI_HYBRID_PARENT * 2 ) 13140 PGUI&( PGUI_WORK& + PGUI_OF_MASTER_OFFSET ) = PGUI_MASTER_OFFSET& 13150 ELSE 13160 PGUI_CHAR_OFFSET& = PGUI&( PGUI_WORK& ) 13170 ENDIF 13180 PGUI$( PGUI_CHAR_OFFSET& + 3 ) = PGUI_DISP$ 13190 IF PGUI_RETURN$ = "" THEN PGUI_RETURN$ = PGUI_DISP$ 13200 PGUI$( PGUI_CHAR_OFFSET& + 4 ) = PGUI_RETURN$ 13210 PGUI&( PGUI_WORK& + PGUI_OF_DISP_SX ) = PGUI_DISP_SX 13220 PGUI&( PGUI_WORK& + PGUI_OF_DISP_SY ) = PGUI_DISP_SY 13230 PGUI&( PGUI_WORK& + PGUI_OF_LINE_SPACE ) = PGUI_LINE_SPACE 13240 PGUI&( PGUI_WORK& + PGUI_OF_LINK_PARTS_NO ) = PGUI_LINK_PARTS_NO 13250 PGUI&( PGUI_WORK& + PGUI_OF_DATA ) = PGUI_DATA& 13260 ' 13270 IF PGUI_E_SX = -1 PGUI_E_SX = PGUI_SX 13280 IF PGUI_E_SY = -1 PGUI_E_SY = PGUI_SY 13290 PGUI&( PGUI_WORK& + PGUI_OF_SX ) = PGUI_E_SX : PGUI&( PGUI_WORK& + PGUI_OF_SY ) = PGUI_E_SY 13300 ' 13310 IF PGUI_E_WX = -1 PGUI_E_WX = PGUI_WX 13320 IF PGUI_E_WY = -1 PGUI_E_WY = PGUI_WY 13330 PGUI&( PGUI_WORK& + PGUI_OF_WX ) = PGUI_E_WX : PGUI&( PGUI_WORK& + PGUI_OF_WY ) = PGUI_E_WY 13340 ' 13350 PGUI&( PGUI_WORK& + PGUI_OF_START_X ) = PGUI_START_X 13360 PGUI&( PGUI_WORK& + PGUI_OF_START_Y ) = PGUI_START_Y 13370 PGUI&( PGUI_WORK& + PGUI_OF_MAX_X ) = PGUI_MAX_X 13380 PGUI&( PGUI_WORK& + PGUI_OF_MAX_Y ) = PGUI_MAX_Y 13390 PGUI&( PGUI_WORK& + PGUI_OF_MIN_X ) = PGUI_MIN_X 13400 PGUI&( PGUI_WORK& + PGUI_OF_MIN_Y ) = PGUI_MIN_Y 13410 PGUI&( PGUI_WORK& + PGUI_OF_DISP_WX ) = PGUI_DISP_WX 13420 PGUI&( PGUI_WORK& + PGUI_OF_DISP_WY ) = PGUI_DISP_WY 13430 RETURN 13440 ' 13450 ' *PGUI_PARTS_ACTIVE 13460 ' 13470 ' 指定した番号の部品をアクティブにします。 13480 ' 13490 ' PGUI_WIN_OFFSET& 検索対象ウィンドウ・データーオフセット 13500 ' PGUI_PARTS_NO データーを取り出す部品番号 13510 ' 名前からの算出は PGUI_NAME$ に部品名をセットし、*PGUI_GET_PARTS_NO 13520 ' 13530 *PGUI_PARTS_ACTIVE 13540 PGUI_PARTS_OFFSET& = PGUI_WIN_OFFSET& + PGUI_WIN_HEADER_SIZE + PGUI_PARTS_NO * PGUI_PARTS_DATA_SIZE 13550 PGUI_CHAR_OFFSET& = PGUI&( PGUI_PARTS_OFFSET& ) 13560 PGUI_NAME$ = PGUI$( PGUI_CHAR_OFFSET& ) 13570 PGUI_TYPE$ = PGUI$( PGUI_CHAR_OFFSET& + 1 ) 13580 PGUI_FORM$ = PGUI$( PGUI_CHAR_OFFSET& + 2 ) 13590 PGUI_DISP$ = PGUI$( PGUI_CHAR_OFFSET& + 3 ) 13600 PGUI_RETURN$=PGUI$( PGUI_CHAR_OFFSET& + 4 ) 13610 ' 13620 PGUI_WORK& = PGUI_PARTS_OFFSET& 13630 PGUI_MASTER_OFFSET& = PGUI&( PGUI_WORK& + PGUI_OF_MASTER_OFFSET ) 13640 PGUI_LIST_OFFSET& = PGUI&( PGUI_WORK& + PGUI_OF_LIST_OFFSET ) 13650 PGUI_LIST_BUF_SIZE&= PGUI&( PGUI_WORK& + PGUI_OF_LIST_BUF_SIZE ) 13660 PGUI_HYBRID_PARENT = (( PGUI&( PGUI_WORK& + 3 ) AND 2 ) = 2 ) 13670 PGUI_HYBRID_CHILD = (( PGUI&( PGUI_WORK& + 3 ) AND 1 ) = 1 ) 13680 PGUI_DISP_SX = PGUI&( PGUI_WORK& + PGUI_OF_DISP_SX ) 13690 PGUI_DISP_SY = PGUI&( PGUI_WORK& + PGUI_OF_DISP_SY ) 13700 PGUI_LINE_SPACE = PGUI&( PGUI_WORK& + PGUI_OF_LINE_SPACE ) 13710 PGUI_LINK_PARTS_NO = PGUI&( PGUI_WORK& + PGUI_OF_LINK_PARTS_NO ) 13720 PGUI_DATA& = PGUI&( PGUI_WORK& + PGUI_OF_DATA ) 13730 ' 13740 PGUI_SX = PGUI&( PGUI_WORK& + PGUI_OF_SX ) : PGUI_SY = PGUI&( PGUI_WORK& + PGUI_OF_SY ) 13750 PGUI_WX = PGUI&( PGUI_WORK& + PGUI_OF_WX ) : PGUI_WY = PGUI&( PGUI_WORK& + PGUI_OF_WY ) 13760 PGUI_START_X= PGUI&( PGUI_WORK& + PGUI_OF_START_X ) 13770 PGUI_START_Y= PGUI&( PGUI_WORK& + PGUI_OF_START_Y ) 13780 PGUI_MAX_X = PGUI&( PGUI_WORK& + PGUI_OF_MAX_X ) 13790 PGUI_MAX_Y = PGUI&( PGUI_WORK& + PGUI_OF_MAX_Y ) 13800 PGUI_MIN_X = PGUI&( PGUI_WORK& + PGUI_OF_MIN_X ) 13810 PGUI_MIN_Y = PGUI&( PGUI_WORK& + PGUI_OF_MIN_Y ) 13820 PGUI_DISP_WX= PGUI&( PGUI_WORK& + PGUI_OF_DISP_WX ) 13830 PGUI_DISP_WY= PGUI&( PGUI_WORK& + PGUI_OF_DISP_WY ) 13840 RETURN 13850 ' 13860 ' *PGUI_GET_PARTS_NO 13870 ' 13880 ' 部品名に対応する部品番号をアクティブウィンドウ内で検索します。 13890 ' 13900 ' PGUI_NAME$ 検索する部品名 13910 ' PGUI_WIN_OFFSET& 検索対象ウィンドウのデーターオフセット 13920 '<RETURN> 13930 ' PGUI_PARTS_NO ウィンドウ内部品番号 13940 ' PGUI_ERROR エラーサイン。正常終了なら0・見つからないなら40を返す。 13950 ' 13960 *PGUI_GET_PARTS_NO 13970 PGUI_PARTS_TOTAL = PGUI&( PGUI_WIN_OFFSET& + 1 ) 13980 PGUI_PARTS_NO = -1 : PGUI_WORK$ = "" : PGUI_ERROR = 0 13990 PGUI_PARTS_OFFSET& = PGUI_WIN_OFFSET& + PGUI_WIN_HEADER_SIZE - PGUI_PARTS_DATA_SIZE 14000 WHILE ( PGUI_PARTS_NO <> PGUI_PARTS_TOTAL ) AND ( PGUI_WORK$ <> PGUI_NAME$ ) 14010 PGUI_PARTS_NO = PGUI_PARTS_NO + 1 14020 PGUI_PARTS_OFFSET& = PGUI_PARTS_OFFSET& + PGUI_PARTS_DATA_SIZE 14030 PGUI_WORK$ = PGUI$( PGUI&( PGUI_PARTS_OFFSET& )) 14040 WEND 14050 IF PGUI_PARTS_TOTAL = PGUI_PARTS_NO THEN PGUI_ERROR = 40 14060 IF PGUI_ERROR = 40 THEN PRINT "指定の部品名 "+PGUI_NAME$+" は存在しません。" 14070 RETURN 14080 ' 14090 ' *PGUI_POS_CALC 14100 ' 14110 ' 言葉で感覚的に指定された部品座標を具体的な数値に変換します。 14120 ' 但し、部品の大きさが分かっている必要があります。 14130 ' 14140 ' PGUI_TYPE$ "WINDOW" の場合は、ウィンドウ内座標でなく、画面内座標を算出する。 14150 ' PGUI_POS$ 部品の感覚的位置キーワード 14160 ' "中央" 14170 ' PGUI_E_WX / E_WY 部品の大きさ 14180 ' < 返り値 > 14190 ' PGUI_E_SX / SY 部品の位置(ウィンドウ内座標) 14200 ' 14210 *PGUI_POS_CALC 14220 IF PGUI_E_WX = -1 PGUI_E_WX = PGUI_WX 14230 IF PGUI_E_WY = -1 PGUI_E_WY = PGUI_WY 14240 ' 14250 IF PGUI_TYPE$ = "WINDOW" THEN 14260 PGUI_WORK_WX = PGUI_RESO_X 14270 PGUI_WORK_WY = PGUI_RESO_Y 14280 ELSE 14290 PGUI_WORK_WX = PGUI_WIN_WX 14300 PGUI_WORK_WY = PGUI_WIN_WY 14310 ENDIF 14320 ' 14330 IF PGUI_POS$ = "中央" THEN 14340 PGUI_E_SX = INT(( PGUI_WORK_WX - PGUI_E_WX )/ 2 ) 14350 PGUI_E_SY = INT(( PGUI_WORK_WY - PGUI_E_WY )/ 2 ) 14360 ENDIF 14370 ' 14380 ' 14390 PGUI_BWX = PGUI_E_WX : PGUI_BWY = PGUI_E_WY 14400 PGUI_BSX = PGUI_E_SX : PGUI_BSY = PGUI_E_SY 14410 RETURN 14420 ' 14430 ' *PGUI_DRAW 14440 ' 14450 ' 表示ルーチンへの分岐管理と、表示の高速化管理を行います。 14460 ' 14470 *PGUI_DRAW 14480 PGUI_DRAW_EX = PGUI_DRAW_SX + PGUI_DRAW_WX - 1 14490 PGUI_DRAW_EY = PGUI_DRAW_SY + PGUI_DRAW_WY - 1 14500 ' 14510 IF PGUI_DRAW$ = "ICON12" GOSUB *PGUI_DRAW_ICON12 : GOTO *PGUI_DRAW_P02 14520 IF PGUI_DRAW$ = "ICON24" GOSUB *PGUI_DRAW_ICON24 : GOTO *PGUI_DRAW_P02 14530 ' 14540 IF PGUI_DRAW_B_WX=PGUI_DRAW_WX AND PGUI_DRAW_B_WY=PGUI_DRAW_WY AND PGUI_DRAW_B$=PGUI_DRAW$ AND PGUI_TYPE$ <> "WINDOW" AND PGUI_WIN_OUT = 0 AND PGUI_FAST_DRAW_VOID = 0 THEN 14550 PUT@A(PGUI_DRAW_SX , PGUI_DRAW_SY)-(PGUI_DRAW_EX,PGUI_DRAW_EY),PGUI_WIN_BUF%,,,,,PGUI_WIN_BUF_OFFSET& 14560 ELSE 14570 IF PGUI_DRAW$ = "ROUND" GOSUB *PGUI_DRAW_ROUND : GOTO *PGUI_DRAW_P01 14580 IF PGUI_DRAW$ = "RECTANGLE" GOSUB *PGUI_DRAW_RECTANGLE : GOTO *PGUI_DRAW_P01 14590 IF PGUI_DRAW$ = "SQUARE" GOSUB *PGUI_DRAW_RECTANGLE_FILL : GOTO *PGUI_DRAW_P01 14600 IF PGUI_DRAW$ = "3D" GOSUB *PGUI_DRAW_3D : GOTO *PGUI_DRAW_P01 14610 IF PGUI_DRAW$ = "SIMPLE 3D" GOSUB *PGUI_DRAW_SIMPLE_3D : GOTO *PGUI_DRAW_P01 14620 IF PGUI_DRAW$ = "CLOSE" GOSUB *PGUI_DRAW_CLOSE_BUTTON : GOTO *PGUI_DRAW_P01 14630 IF PGUI_DRAW$ = "SQUARE2" GOSUB *PGUI_DRAW_SQUARE2 : GOTO *PGUI_DRAW_P01 14640 IF PGUI_DRAW$ = "T-OS" GOSUB *PGUI_DRAW_T_OS : GOTO *PGUI_DRAW_P01 14650 IF PGUI_DRAW$ = "WINDOWS" GOSUB *PGUI_DRAW_WIN_FRAME : GOTO *PGUI_DRAW_P01 14660 *PGUI_DRAW_P01 14670 ' 14680 IF PGUI_TYPE$ <> "WINDOW" AND PGUI_WIN_OUT = 0 THEN 14690 PGUI_DRAW_B_WX = PGUI_DRAW_WX : PGUI_DRAW_B_WY = PGUI_DRAW_WY 14700 PGUI_DRAW_B$ = PGUI_DRAW$ : PGUI_FAST_DRAW_VOID = 0 14710 GET@A(PGUI_DRAW_SX , PGUI_DRAW_SY)-(PGUI_DRAW_EX,PGUI_DRAW_EY),PGUI_WIN_BUF%,PGUI_WIN_BUF_OFFSET& 14720 ENDIF 14730 *PGUI_DRAW_P02 14740 ENDIF 14750 RETURN 14760 ' 14770 ' *PGUI_DRAW_CLOSE_BUTTON 14780 ' 14790 ' ウィンドウクローズ用ボタンを表示します。 14800 ' 14810 *PGUI_DRAW_CLOSE_BUTTON 14820 LINE( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF 14830 CONNECT( PGUI_DRAW_SX , PGUI_DRAW_EY )-( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_SY ),7,PSET 14840 PGUI_Y = PGUI_DRAW_SY 14850 FOR PGUI_I = 0 TO 4 14860 PGUI_Y = PGUI_Y + 2 14870 LINE( PGUI_DRAW_SX + 2 , PGUI_Y )-( PGUI_DRAW_EX - 1 , PGUI_Y ),PSET,7,,&HAAAA 14880 NEXT 14890 RETURN 14900 ' 14910 ' *PGUI_DRAW_T_OS 14920 ' 14930 ' Towns-OS デザインのウィンドウ枠を表示します。 14940 ' PGUI_DRAW_SX / SY / EX / EY 14950 ' 14960 *PGUI_DRAW_T_OS 14970 LINE( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF,7 14980 LINE( PGUI_DRAW_EX - 2 , 1 )-( PGUI_DRAW_EX -1 , PGUI_DRAW_EY -1 ),PSET,,BF 14990 LINE( 1 , PGUI_DRAW_EY - 2 )-( PGUI_DRAW_EX -1 , PGUI_DRAW_EY -1 ),PSET,,BF 15000 ' 15010 PGUI_WORK_LEN = LEN( PGUI_DISP$ ) 15020 IF PGUI_WORK_LEN <> 0 THEN 15030 PGUI_WORK_WX = 40 + PGUI_WORK_LEN * 6 + 27 15040 LINE( 0 , 16 )-( PGUI_DRAW_EX , 16 ),PSET 15050 LINE( 1 , 1 )-( PGUI_WORK_WX , 15 ),PSET,,BF 15060 LINE( PGUI_WORK_WX + 1 , 1 )-( PGUI_DRAW_EX - 3 , 15 ),PRESET,,BF 15070 ENDIF 15080 SYMBOL( 40 , 3 ) , PGUI_DISP$ , PGUI_SYMBOL_M! , PGUI_SYMBOL_M! , 7 15090 RETURN 15100 ' 15110 ' *PGUI_DRAW_SQUARE2 15120 ' 15130 ' 二重枠付の長方形部品を表示します。 15140 ' PGUI_DRAW_SX / SY / EX / EY 15150 ' 15160 *PGUI_DRAW_SQUARE2 15170 LINE( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF,7 15180 LINE( PGUI_DRAW_SX + 2 , PGUI_DRAW_SY + 2 )-( PGUI_DRAW_EX - 2 , PGUI_DRAW_EY - 2 ),PSET,,B 15190 LINE( PGUI_DRAW_SX + 3 , PGUI_DRAW_SY + 3 )-( PGUI_DRAW_EX - 3 , PGUI_DRAW_EY - 3 ),PSET,,B 15200 RETURN 15210 ' 15220 ' *PGUI_DRAW_WIN_FRAME 15230 ' 15240 ' WINDOWS ライクなウィンドウ枠を表示します。 15250 ' PGUI_DRAW_SX / SY / EX / EY 15260 ' 15270 *PGUI_DRAW_WIN_FRAME 15280 LINE( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF,7 15290 LINE( PGUI_DRAW_SX+1,PGUI_DRAW_SY+1)-( PGUI_DRAW_EX-1,PGUI_DRAW_EY-1),PSET,,B 15300 ' 15310 LINE( PGUI_DRAW_SX+2 , PGUI_DRAW_SY+2 )-( PGUI_DRAW_EX-2 , PGUI_DRAW_SY+17 ),PRESET,,BF 15320 LINE( PGUI_DRAW_SX+2 , PGUI_DRAW_SY+18 )-( PGUI_DRAW_EX-2 , PGUI_DRAW_SY+18 ),PSET,,B 15330 ' 15340 SYMBOL( PGUI_DRAW_SX + 150 , PGUI_DRAW_SY + 4 ),PGUI_DISP$ , PGUI_SYMBOL_M! , PGUI_SYMBOL_M! 15350 RETURN 15360 ' 15370 ' *PGUI_DRAW_ROUND 15380 ' 15390 ' 角の丸い部品を表示します。 15400 ' PGUI_DRAW_SX / SY / EX / EY / R 15410 ' 15420 *PGUI_DRAW_ROUND 15430 PGUI_WORK_CSX = PGUI_DRAW_SX + PGUI_DRAW_R 15440 PGUI_WORK_CSY = PGUI_DRAW_SY + PGUI_DRAW_R 15450 PGUI_WORK_CEX = PGUI_DRAW_EX - PGUI_DRAW_R 15460 PGUI_WORK_CEY = PGUI_DRAW_EY - PGUI_DRAW_R 15470 CIRCLE( PGUI_WORK_CSX , PGUI_WORK_CSY ),PGUI_DRAW_R,,,.5!,.75!,F,PSET,7 15480 CIRCLE( PGUI_WORK_CEX , PGUI_WORK_CSY ),PGUI_DRAW_R,,,.75!,1,F,PSET,7 15490 CIRCLE( PGUI_WORK_CSX , PGUI_WORK_CEY ),PGUI_DRAW_R,,,.25!,.5!,F,PSET,7 15500 CIRCLE( PGUI_WORK_CEX , PGUI_WORK_CEY ),PGUI_DRAW_R,,,0,.25!,F,PSET,7 15510 ' 15520 LINE( PGUI_WORK_CSX , PGUI_DRAW_SY + 1 )-( PGUI_WORK_CEX , PGUI_WORK_CSY ),PSET,7,BF 15530 LINE( PGUI_DRAW_SX + 1 , PGUI_WORK_CSY )-( PGUI_DRAW_EX - 1 , PGUI_WORK_CEY ),PSET,7,BF 15540 LINE( PGUI_WORK_CSX , PGUI_WORK_CEY )-( PGUI_WORK_CEX , PGUI_DRAW_EY - 1 ),PSET,7,BF 15550 ' 15560 LINE( PGUI_WORK_CSX , PGUI_DRAW_SY )-( PGUI_WORK_CEX , PGUI_DRAW_SY ),PSET 15570 LINE( PGUI_WORK_CSX , PGUI_DRAW_EY )-( PGUI_WORK_CEX , PGUI_DRAW_EY ),PSET 15580 LINE( PGUI_DRAW_SX , PGUI_WORK_CSY )-( PGUI_DRAW_SX , PGUI_WORK_CEY ),PSET 15590 LINE( PGUI_DRAW_EX , PGUI_WORK_CSY )-( PGUI_DRAW_EX , PGUI_WORK_CEY ),PSET 15600 RETURN 15610 ' 15620 ' *PGUI_DRAW_RECTANGLE_FILL 15630 ' 枠付きの矩形部品を表示します。 15640 ' PGUI_DRAW_SX / SY / EX / EY 15650 ' 15660 *PGUI_DRAW_RECTANGLE_FILL 15670 LINE( PGUI_DRAW_SX , PGUI_DRAW_SY ) - ( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF,7 15680 RETURN 15690 ' 15700 *PGUI_DRAW_RECTANGLE 15710 LINE( PGUI_DRAW_SX , PGUI_DRAW_SY ) - ( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,B 15720 RETURN 15730 ' 15740 ' *PGUI_DRAW_3D 15750 ' 盛り上がったボタンを書きます。 15760 ' PGUI_DRAW_SX / SY / EX / EY / HEIGHT 15770 ' 15780 *PGUI_DRAW_3D 15790 FOR PGUI_WORK = 0 TO PGUI_DRAW_HEIGHT - 1 15800 CONNECT(PGUI_DRAW_SX + PGUI_WORK,PGUI_DRAW_EY-PGUI_WORK)-(PGUI_DRAW_SX + PGUI_WORK,PGUI_DRAW_SY + PGUI_WORK)-(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_SY + PGUI_WORK),7 15810 CONNECT(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_SY+PGUI_WORK+1)-(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_EY-PGUI_WORK)-(PGUI_DRAW_SX+PGUI_WORK+1,PGUI_DRAW_EY-PGUI_WORK),,PSET 15820 NEXT 15830 LINE( PGUI_DRAW_SX + PGUI_DRAW_HEIGHT , PGUI_DRAW_SY + PGUI_DRAW_HEIGHT )-(PGUI_DRAW_EX - PGUI_DRAW_HEIGHT , PGUI_DRAW_EY - PGUI_DRAW_HEIGHT ),PRESET,,BF 15840 RETURN 15850 ' 15860 ' *PGUI_DRAW_SIMPLE_3D 15870 ' シンプルな盛り上がったボタンを書きます。 15880 ' PGUI_DRAW_SX / SY / EX / EY / HEIGHT 15890 ' 15900 *PGUI_DRAW_SIMPLE_3D 15910 LINE(PGUI_DRAW_SX,PGUI_DRAW_SY)-(PGUI_DRAW_EX,PGUI_DRAW_EY),PSET,,BF,7 15920 FOR PGUI_WORK = 1 TO PGUI_DRAW_HEIGHT 15930 CONNECT(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_SY+PGUI_WORK+1)-(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_EY-PGUI_WORK)-(PGUI_DRAW_SX+PGUI_WORK+1,PGUI_DRAW_EY-PGUI_WORK),,PSET 15940 NEXT 15950 RETURN 15960 ' 15970 ' *PGUI_DRAW_ICON24 15980 ' アイコンを表示します。 15990 ' PGUI_DRAW_SX / SY / WX / WY 16000 ' 16010 *PGUI_DRAW_ICON24 16020 PUT@A( MAP( PGUI_DRAW_SX , 0 ) , MAP( PGUI_DRAW_SY , 1 ))-( MAP( PGUI_DRAW_SX + PGUI_DRAW_WX - 1 , 0 ) , MAP( PGUI_DRAW_SY + PGUI_DRAW_WY - 1 , 1 )),PGUI_ICON_BUF%,MATTE,,,7,PGUI_ICON24_OFFSET& + PGUI_DATA& * PGUI_ICON24_BUF_SIZE& 16030 RETURN 16040 ' 16050 *PGUI_DRAW_ICON12 16060 PUT@A( MAP( PGUI_DRAW_SX , 0 ) , MAP( PGUI_DRAW_SY , 1 ))-( MAP( PGUI_DRAW_SX + PGUI_DRAW_WX - 1 , 0 ) , MAP( PGUI_DRAW_SY + PGUI_DRAW_WY - 1 , 1 )),PGUI_ICON_BUF%,MATTE,,,7,PGUI_ICON12_OFFSET& + PGUI_DATA& * PGUI_ICON12_BUF_SIZE& 16070 RETURN 16080 ' 16090 ' *PGUI_READ_TEXT 16100 ' 16110 ' テキストファイルをリストデータ領域に読み込みます。 16120 ' 16130 ' PGUI_LIST_OFFSET& リストデータの先頭オフセット 16140 ' PGUI_LIST_BUF_SIZE& 利用する領域のサイズ 16150 ' PGUI_FILE_NAME$ 読み込むテキストファイル名 16160 ' <RETURN> 16170 ' PGUI_MAX_Y テキストデータの総行数 16180 ' 16190 *PGUI_READ_TEXT 16200 OPEN "I", 16 , PGUI_FILE_NAME$ 16210 PGUI_MAX_Y = 0 16220 WHILE EOF(16) = 0 16230 IF PGUI_MAX_Y < PGUI_LIST_BUF_SIZE& THEN 16240 LINE INPUT# 16 , PGUI_LIST$( PGUI_LIST_OFFSET& + PGUI_MAX_Y ) 16250 ENDIF 16260 PGUI_MAX_Y = PGUI_MAX_Y + 1 16270 WEND 16280 CLOSE 16 16290 RETURN 16300 ' 16310 ' *PGUI_LIST_SCROLL 16320 ' 16330 ' リストメニューをスクロールします。 16340 ' 16350 ' PGUI_PARTS_OFFSET& 16360 ' PGUI_LIST_OFFSET& / LIST_BUF_SIZE& / START_Y / MIN_Y / MAX_Y / SX / SY / DISP_WY / WX 16370 ' 16380 ' PGUI_DIRECTION_Y = +1 | -1 16390 ' 16400 *PGUI_LIST_SCROLL 16410 ' 16420 PGUI_WORK_SX = PGUI_SX + PGUI_DISP_SX : PGUI_WORK_SY = PGUI_SY + PGUI_DISP_SY 16430 PGUI_WORK_EX = PGUI_SX + PGUI_WX - 2 : PGUI_WORK_EY = PGUI_SY + PGUI_WY - 1 - PGUI_DISP_SY 16440 PGUI_WORK_LWY = PGUI_FONT_WY + PGUI_LINE_SPACE 16450 PGUI_WORK_SY_PL1 = PGUI_WORK_SY + PGUI_WORK_LWY 16460 PGUI_WORK_CWY = PGUI_WORK_EY - PGUI_WORK_SY - 1 - PGUI_WORK_LWY 16470 IF PGUI_DIRECTION_Y = 1 THEN 16480 PGUI_WORK_GY = PGUI_WORK_SY_PL1 : PGUI_WORK_ESY = PGUI_WORK_EY - PGUI_WORK_LWY + 1 16490 PGUI_WORK_PY = PGUI_WORK_SY 16500 PGUI_WORK_OFFD = PGUI_DISP_WY - 1 : PGUI_START_Y = PGUI_START_Y + 1 16510 ELSE 16520 PGUI_WORK_GY = PGUI_WORK_SY : PGUI_WORK_ESY = PGUI_WORK_SY 16530 PGUI_WORK_PY = PGUI_WORK_SY_PL1 16540 PGUI_WORK_OFFD = 0 : PGUI_START_Y = PGUI_START_Y - 1 16550 ENDIF 16560 GET@A(PGUI_WORK_SX,PGUI_WORK_GY)-(PGUI_WORK_EX,PGUI_WORK_GY+PGUI_WORK_CWY),PGUI_LIST_SCROLL% 16570 PUT@A(PGUI_WORK_SX,PGUI_WORK_PY)-(PGUI_WORK_EX,PGUI_WORK_PY+PGUI_WORK_CWY),PGUI_LIST_SCROLL% 16580 LINE( PGUI_WORK_SX,PGUI_WORK_ESY)-(PGUI_WORK_EX,PGUI_WORK_ESY+PGUI_WORK_LWY-1),PSET,7,BF 16590 SYMBOL( PGUI_WORK_SX , PGUI_WORK_ESY + INT( PGUI_LINE_SPACE / 2 )),PGUI_LIST$( PGUI_LIST_OFFSET& + PGUI_START_Y + PGUI_WORK_OFFD ),PGUI_SYMBOL_M!,PGUI_SYMBOL_M! 16600 ' 16610 PGUI&( PGUI_PARTS_OFFSET& + PGUI_OF_START_Y ) = PGUI_START_Y 16620 RETURN